Kopieren dauert immer unterschiedlich lange

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 28 Antworten in diesem Thema. Der letzte Beitrag () ist von petaod.

    @DTF @Andy

    Moin moin

    Ich habe mal ein neues Projekt gemacht und folgende Klasse benutzt.
    Seltsames:

    Beim ersten Durchlauf hatte ich Transferraten zwischen 45-50 MB
    Beim zweiten / dritten wurde es immer weniger obwohl ich nichts geändert habe.

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class FileCopyExample
    2. ' Code ist nicht mehr aktuell




    Bau dir lieber selbst einen.

    Diese Idee hatte ich auch schon, aber noch immer viel Geld für mich. :(


    Edit: Code entfernt weil nicht mehr aktl
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Amelie“ ()

    @Amelie Die Frage die sich mir stellt ist, warum nutzt Du nicht zum Kopieren die in Windows vorhanden Schnittstellen? Wenn Dir das über das Interface IFileOperation zu kompliziert ist, dann gibt es noch die API SHFileOperation. Zumindest wäre es ein Test wert um mal die zeitlichen Unterschiede zu Deinem Code zu testen.
    Mfg -Franky-
    @-Franky-

    Ich habe eben mal groß überschlagen mit den Sachen die du angesprochen hast.
    Wenn ich das richtig verstanden habe, müsste ich ein vielfaches mehr an Code schreiben und wäre evtl nicht so flexibel :?:

    ​Die SHFileOperation API
    wären mir noch zu hoch, da reicht mein skill nicht.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    müsste ich ein vielfaches mehr an Code schreiben und wäre evtl nicht so flexibel


    Ich finde mit den Interfaces ist man flexibler. Man kann die Dialoge auch noch ein wenig Customizen, weil in WPF irgendein Dialog fehlte, ich nicht auf WinForms verweisen wollte, habe ich mir auch mit den Interfaces Dialoge gemacht. Wichtig ist falls du @-Franky- s Code nutzt, schau dir die Interface bei MS an, dort ist erklärt, was welche Funktion macht. Erst wenn du die Interfaces kennengelernt hast, also weist was sie bieten, welche Fallen es gibt(Immer die Hinweise bei MS lesen), kannst du sie auch wirlich richtig nutzen, vorausgesetzt du kannst dir eine Instanz holen via COM, was leicht zu erlernen ist.

    Aber ja, ein wenig mehr Code ist das. Aber kommen neue Interfaces raus und die NET Dialoge sind noch nicht geupdated, hast du bereits eigene die du schnell updaten kannst. Macht man sich eine DLL draus und hat seine Dialoge immer parat.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    @DTF
    Ich werde mich damit bei Zeiten mal intensiver beschäftigen.

    Eine kleine Frage "OffTropic"
    Ich erstelle mir grade eine CustumProgressbar. Habe das mit einem "Panel" gemacht. Läuft gut und flackert nicht. :thumbup:

    Nun las ich eine "PictureBox" wäre besser geeigent?
    Hab das ausprobiert aber keinen Unterschied festgestellt. :?:
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    ​Die SHFileOperation API wäre mir noch zu hoch, da reicht mein skill nicht.

    So kompliziert ist es nicht: Du brauchst nur eine API, eine Structure und ein paar Const/Flags. Auch hier kannst Du Dir einen Dialog anzeigen lassen, der den Fortschritt anzeigt. inkl. Pausieren, Abbrechen des Kopiervorganges und eventueller weitererer Dialoge falls im Zielverzeichniss gleiche Dateien/Ordner vorhanden sind. Per Flags lässt sich auch vieles steuern. zB. ob vorhandene Dateien/Ordner ohne Nachfrage ersetzt oder automatisch umbenannt werden sollen. Auch wenn man die API ab WinVista nicht mehr nutzen sollte, funktioniert diese weiterhin. Ich bin mir sehr sicher das Du einige fertige VB.NET oder C# Beispiele dazu findest.

    Wegen einer Zeitmessung. Du kannst den Kopiervorgang natürlich auch mit dem Explorer durchführen und kannst so feststellen, ob der Explorer schneller oder langsamer kopiert als Deine Methode.
    Mfg -Franky-

    Neu

    @-Franky-

    Wegen einer Zeitmessung.


    Das testen mit dem Explorer und meinem Copy-Code brachte so in etwa gleiche Ergebnisse.
    Testumgebung: Win 7 64Bit - 16GB RAM frisch formatierte an USB2.0 alte SATA HDD 60GB / Testverzeichnis von interner SSD 2,35GB

    1.) Windows Explorer dauerte ca. 2,5 Minuten
    2.) Mein Code dauerte 2,02 Minuten ( Platte wieder frisch formatiert / PC neu gestartet )

    Diese Tests habe ich mehrfach wiederholt. Mal war der Explorer dann schneller oder auch langsamer. Immer um die 30 Sec.
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Neu

    Das sind ca. 20 MB/s, also 160 MBit/s.
    Das ist für USB 2.0 gar kein so schlechter Wert.
    Jedenfalls nichts, wo ich große Performance-Schübe erwarten würde, egal was du optimierst.

    Helfen könnte ein USB3-Controller.
    Sowas z.B. wenn du einen PCIe-Slot frei hast.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „petaod“ ()