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.

    Kopieren dauert immer unterschiedlich lange

    Moin moin

    Ich habe folgendes beim testen beobachtet. Hoffe ihr könnt mir das erklären / helfen..??? :)

    Das kopieren von völlig identischen Daten ( Verzeichnisse / Unterverzeichnisse / Dateien ) dauert immer unterschiedlich lange.
    An der Umgebung habe ich nichts geändert. Identische Festplatte usw.. Keine anderen Programme während des testen geöffnet oder geschlossen.

    Testsystem Win 7 64Bit - 16GB RAM - Kopieren von interner SSD auf externe HDD USB 1.0

    Test 1:
    Mein Programm gestartet, kopieren lassen. Nachdem es fertig war, gleich nochmal das kopieren angestoßen. Hier war schon ein Unterschied von fast 30 Sekunden ( langsamer ) gemessen.

    Test 2:
    Mein Programm gestartet, kopieren lassen. Nachdem es fertig war, mein Programm geschlossen, neu gestartet und wieder kopieren lassen. Unterschied 10 Sekunden ( schneller ) gemessen.
    Nachdem es fertig war, gleich nochmal das kopieren angestoßen. Unterschied 20 Sekunden langsamer!

    Das 2te Phänomen:

    Das ändern der Buffersize hat kaum Auswirkungen. Unterschiede zwischen 5 und 10 Sek.
    Auszug aus der Class:

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Private NewBuffersize As Integer
    2. Public Sub New()
    3. NewBuffersize = CalculateBufferSize()
    4. End Sub
    5. Private Function GetSystemRAM() As ULong
    6. ' Erstelle eine Abfrage, um den installierten Arbeitsspeicher abzurufen
    7. Dim query As New SelectQuery("Win32_PhysicalMemory")
    8. Dim searcher As New ManagementObjectSearcher(query)
    9. Dim totalMemory As ULong = 0
    10. ' Durchlaufe alle physikalischen Speichergeräte und summiere den Arbeitsspeicher
    11. For Each memory As ManagementObject In searcher.Get()
    12. totalMemory += Convert.ToUInt64(memory("Capacity"))
    13. Next
    14. ' Konvertiere Bytes in Gigabytes und runde auf die nächste Ganzzahl
    15. Return CULng(Math.Ceiling(totalMemory / (1024 * 1024 * 1024)))
    16. End Function
    17. Private Function CalculateBufferSize() As Integer
    18. Dim totalRAM As ULong = GetSystemRAM()
    19. ' Basierend auf der Größe des installierten Arbeitsspeichers die Buffergröße festlegen
    20. If totalRAM <= 4 Then
    21. Return 1024 ' 1 GB
    22. ElseIf totalRAM <= 8 Then
    23. Return 2048 ' 2 GB
    24. ElseIf totalRAM <= 12 Then
    25. Return 4096 ' 4 GB
    26. ElseIf totalRAM <= 16 Then
    27. Return 8192 ' 8 GB
    28. Else
    29. Return 4096 ' 4 GB
    30. End If
    31. End Function
    32. Private Async Function CopyFileClusterWise(sourceFilePath As String, destinationFilePath As String) As Task(Of Boolean)
    33. Dim clusterSize As Integer = NewBuffersize ' Zum Test feste Werte eingegeben!
    34. 'Debug.WriteLine(NewBuffersize)
    35. ' Öffne die Quelldatei zum Lesen
    36. Using sourceFileStream As New FileStream(sourceFilePath, FileMode.Open, FileAccess.Read)
    37. ' Erstelle die Zieldatei
    38. Using destinationFileStream As New FileStream(destinationFilePath, FileMode.Create, FileAccess.Write)
    39. ' Puffer zum Lesen/Schreiben clusterweise
    40. Dim buffer(clusterSize - 1) As Byte
    41. Dim bytesRead As Integer
    42. Try
    43. ' Lese aus der Quelldatei und schreibe in die Zieldatei clusterweise
    44. Do
    45. bytesRead = Await sourceFileStream.ReadAsync(buffer, 0, buffer.Length)
    46. Await destinationFileStream.WriteAsync(buffer, 0, bytesRead)
    47. Loop While bytesRead > 0
    48. ' Rückgabe, dass das Kopieren erfolgreich war
    49. Return True
    50. Catch ex As Exception
    51. ' Rückgabe, dass das Kopieren fehlgeschlagen ist
    52. Return False
    53. End Try
    54. End Using
    55. End Using
    56. End Function

    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:

    Amelie schrieb:

    USB 1.0
    What :?:
    Ist das ein Schreibfehler oder Dein Ernst?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    USB 1? Wow, dein Rechner hat durchaus einen Sticker mit einem "H" verdient. Ich hoffe dir ist bewusst, das bei USB 1 max. ca.12 MB/s übertragen wird.

    Amelie schrieb:

    Das ändern der Buffersize hat kaum Auswirkungen. Unterschiede zwischen 5 und 10 Sek.

    Das finde ich durchaus nennenswert, wenn ich ohne Mühe 5-10 Sekunden irgendwo sparen kann, wo sonst der User warten müsste, tu ich das.

    Aber zu den Unterschiedlichen Zeiten, neben der langsamen übertragung muss die Mechanik bewegt werden, die Scheiben beschleunigt/entschleunigt werden, sowas kann durchaus ein wenig Zeit brauchen. Ich behaupte mal, mach das mal mit einer externen SSD, da wirste kaum Unterschiede merken.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

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

    OK.
    Auch nicht viel besser.
    Vielleicht solltest Du Dir doch mal einen neuen Rechner schenken lassen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das ist normal das das kopieren von Dateien unterschiedlich lange dauert, da ja deine Festplatte / SSD auch von diversen anderen Programmen genutzt werden kann zur selben Zeit etc. Evtl kannst du auch deinen RAM ergänzen. 32GB sind durchaus üblich heutzutage. Gibt auch System die bereits 64GB oder mehr haben.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Es gilt auch noch zu sagen, das Daten nicht grundsätzlich als ein "Datenstrang" auf die HDD geschrieben werden. Hier kann ein Stück sein, ein weiteres Stück woanders, deshalb defragmentiert man HDDs um die Performence wieder zu verbessern. Somit gleicht kein Schreibvorgang dem anderen, selbst bei identischen Dateien.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D
    @Amelie Berechnest Du die Größe des Buffers, der zu lesenden/zu schreibenden Daten, anhand des verfügbaren RAM? Such mal im Internet nach "Optimal BufferSize for copy" und warum ein zu großer Buffer eher dazu führt, daß das ganze langsamer wird.
    Mfg -Franky-
    Ja, allerdings sind 400+ MB/s immer noch ausreichend. Hab meine Unreal-Assets und Projekte auf einer Sata-SSD, da sind auch nur knapp 400MB/s drin, aber alles ist schnell egscherieben und flott geladen. Gibt sogar Mainboards wo unter/hinter der Grafikkarte ein M2 Slot ist. Da bringt die beste SSD mit dicksten(wenns denn passt) Kühlkörper nix. Amelie verwendet ja eine HDD, dazu eine externe, die haben oft eine schlechte Belüftung das kann auch einen Unterschied machen.

    Auch die Art der Festplatte kann einen Unterschied machen. Gibt ja welche für Aufzeichnung, NAS, Server, öko(WD-Green) und noch mehr einsatzzwecke.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

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

    @-Franky-
    ​Berechnest Du die Größe des Buffers

    Ja genau so mache ich das, weil mir das mal jemand so erklärt hatte..
    Werde mir mal den Artikel durchlesen etc. Danke :thumbup:

    @Andy @DTF
    Mehr als 16GB RAM kann ich nicht einbauen. Ich habe eine SSD (OS drauf) und eine M2 in einem PCIe Adapter und eine HDD (1TB intern) Als "zwischenlager" :D .
    Externe sind alles USB Festpaltten, Teilweise USB3 / USB2 aber der PC hat ja nur USB2.
    Sind aber keine speziellen HDDs; Toshiba, WD, Samsung ....bunte Mischung. Hab immer gekauft wenn günstig war. 8-)

    Aber "SSD" soll man doch nicht defragmentieren oder??? :?: Oder ging es nur um die extern HDDs :?:


    Habe nun nochmal weitere Test mit einer externen SSD gemacht. Da sind die Messungen fast immer identisch. Abweichungen 1Sek.
    Komischerweise ist das selbe Programm mit den selben Daten zu kopieren unter Windows 10 etwas langsamer obwohl die CPU eine i7 Core ist und ich nur eine i3 Core habe. ?(
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    Nein SSDs brauchst du nicht defragmentieren, aber HDDs. Bei der SSD ist egal wo Dateifetzen sind(oder freie Lücken zum schreiben), da muss keine Mechanik bewegt werden was ausbremst.
    16 GB Ram ist soweit ok, hab auch nur 16GB aber 3600 MHz , nur mit der Unreal Engine oder einem Spiel bekomme ich die ausgelastet. Aber das ist zum kopieren nicht wichtig.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

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

    Das mit i7 und i3 ist nicht so wichtig. Ein I3 der neuen Generation ist schneller als ein i7 der 2 Generation. Da kommt es darauf an aus welcher generation die CPU ist. Intel Core i3-14100 vs Intel Core i7-2600 @ 3.40GHz [cpubenchmark.net] by PassMark Software
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Amelie schrieb:


    Aber "SSD" soll man doch nicht defragmentieren oder??? Oder ging es nur um die extern HDDs


    Richtig, SSDs garnicht defragmentieren. Wenn Du deine SSD paar Lebensstunden schenken moechtest, dann schau falls Du mit WIndows unterwegs bist den Dienst *WIndows search/Suche* dauerhaft abschaltest. Es geht im Prinzip darum, die Anzahl an I/O Operationen auf einem notwendigen Minimum zu halten.

    DTF schrieb:

    Ja, allerdings sind 400+ MB/s immer noch ausreichend.


    Die Grafik oben ist ein random Beispiel was Ich ausm Netz als Referenz herangezogen habe, aus der Annahme, dass in dem Beispiel vom TE(-in) Post 1 min. ein Massenspeichermedium herangezogen worden welcher mit NAND Komponenten arbeitet. Da in dem Fall es sich um eine externe SSD handelt, spielen Umgebungstemperaturen eine signifikante Rolle.

    Andy schrieb:

    Das mit i7 und i3 ist nicht so wichtig. Ein I3 der neuen Generation ist schneller als ein i7 der 2 Generation. Da kommt es darauf an aus welcher generation die CPU ist.


    Das ist korrekt, dieses Beispiel haette Ich Mir in Post 7 auch gewuenscht - mehr RAM Speicher wird in den meisten Faellen nur ein Downgrade und Performanceeinbrueche bringen, weil meistens nur auf Kapazitaet und Taktfrequenz (wenn ueberhaupt bei dem heutigem Marketing und RGB Zeug) geachtet wird. Der kritische Faktor sind die tick Raten die darueber entscheiden wie schnell eine CPU mit dem RAM arbeiten kann. Voraussetzung ist auch, dass eine CPU sowie Mainboard den neuen RAM Unterstuetzt, Blick ins Manual des Mainboards ist unumgaenglich.
    Moin moin

    Ich habe mal ein Bild meines Systems angegangen.
    Für mich und meine Arbeit ist das ganze System eigentlich schnell genug. Photoshop, OpenOffice etc laufen sehr schnell. Auch habe ich das VS 2019 nun so eingerichtet bekommen, das es schnell genug ist.

    Habe nun öfters versucht auf diesem System Windows 10 zum laufen zu bekommen. Es läuft ist aber so schrecklich lahm. Klicke ich z.B. auf Chrome um den zu öffnen dauert es gefühlte Ewigkeiten. So ist es quasi bei allem.

    Nunja, ich gugge nochmal wie das mit dem Buffer verhält.

    stackoverflow.com/questions/30…rosoft-uses-to-copy-files

    Ansonsten ist das kopieren für mich eigentlich schnell genug.

    Das kopieren von 3,5 GB Daten ( Bilder, Videos, MP3, PSD ..) von Interner HDD auf externer HDD an USB2.0 dauerte : 03:31
    Bilder
    • sys1.jpg

      348,28 kB, 1.008×714, 67 mal angesehen
    Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen. :huh:
    oha, du solltest dir eventuell wirklich Gedanken über ein neues System machen. Du hast ein i3 der 3 Generation, dass ist wirklich sehr alt. Aber davon abgesehen sind die 3 Minuten auf eine externe HDD (nicht SSD) mit USB2.0 sehr normal. Viel schneller wird das nicht werden. Hier kannst du das ganz gut ausrechnen rechneronline.de/uebertragung/ . Laut der Berechnung brauchst du für die Übertragung knapp 2 Minuten. Da du eine HDD nutzt kommt es darauf an, wie schnell die Schreibgeschwindigkeit von dieser ist.

    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Amelie schrieb:

    kaufe ich mir mal einen neuen


    Bau dir lieber selbst einen.

    Ryzen 5 5600G 110€ mit Standard-Kühler// Grafik integriert
    RAM 16GB 3200 MHz 70€
    MainBoard reicht eins für 70€
    Win10 Pro OEM Lizenz(mit Upgrade auf Win11) ~30€

    Wenn du dann noch alte HDDs, SSDs, ein altes Netzteil und Gehäuse hast, hast du günstig ein Upgrade gemacht, Für AM4 kommen zwar keine neuen CPUs mehr raus, du könntest im Nachhinein aber immer noch die CPU upgraden. So günstig kannst du so eine Leistung nicht fertig kaufen. so ein Komplett PC kostet sicher 500-600€+ Aber bei dem Dell PC kannste evtl. kein anderes Board einbauen, da hatte ich schon so einige eigensinnige Dell-Konstruktionen, wo nur Dell-Teile passten. Ich hab da gauch ganz speziell die Netzteile in Erinnerung.
    Zitat von mir 2023:
    Was interessiert mich Rechtschreibung? Der Compiler wird meckern wenn nötig :D

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „DTF“ ()