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.
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
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:
VB.NET-Quellcode
-
- Private NewBuffersize As Integer
- Public Sub New()
- NewBuffersize = CalculateBufferSize()
- End Sub
- Private Function GetSystemRAM() As ULong
- ' Erstelle eine Abfrage, um den installierten Arbeitsspeicher abzurufen
- Dim query As New SelectQuery("Win32_PhysicalMemory")
- Dim searcher As New ManagementObjectSearcher(query)
- Dim totalMemory As ULong = 0
- ' Durchlaufe alle physikalischen Speichergeräte und summiere den Arbeitsspeicher
- For Each memory As ManagementObject In searcher.Get()
- totalMemory += Convert.ToUInt64(memory("Capacity"))
- Next
- ' Konvertiere Bytes in Gigabytes und runde auf die nächste Ganzzahl
- Return CULng(Math.Ceiling(totalMemory / (1024 * 1024 * 1024)))
- End Function
- Private Function CalculateBufferSize() As Integer
- Dim totalRAM As ULong = GetSystemRAM()
- ' Basierend auf der Größe des installierten Arbeitsspeichers die Buffergröße festlegen
- If totalRAM <= 4 Then
- Return 1024 ' 1 GB
- ElseIf totalRAM <= 8 Then
- Return 2048 ' 2 GB
- ElseIf totalRAM <= 12 Then
- Return 4096 ' 4 GB
- ElseIf totalRAM <= 16 Then
- Return 8192 ' 8 GB
- Else
- Return 4096 ' 4 GB
- End If
- End Function
- Private Async Function CopyFileClusterWise(sourceFilePath As String, destinationFilePath As String) As Task(Of Boolean)
- Dim clusterSize As Integer = NewBuffersize ' Zum Test feste Werte eingegeben!
- 'Debug.WriteLine(NewBuffersize)
- ' Öffne die Quelldatei zum Lesen
- Using sourceFileStream As New FileStream(sourceFilePath, FileMode.Open, FileAccess.Read)
- ' Erstelle die Zieldatei
- Using destinationFileStream As New FileStream(destinationFilePath, FileMode.Create, FileAccess.Write)
- ' Puffer zum Lesen/Schreiben clusterweise
- Dim buffer(clusterSize - 1) As Byte
- Dim bytesRead As Integer
- Try
- ' Lese aus der Quelldatei und schreibe in die Zieldatei clusterweise
- Do
- bytesRead = Await sourceFileStream.ReadAsync(buffer, 0, buffer.Length)
- Await destinationFileStream.WriteAsync(buffer, 0, bytesRead)
- Loop While bytesRead > 0
- ' Rückgabe, dass das Kopieren erfolgreich war
- Return True
- Catch ex As Exception
- ' Rückgabe, dass das Kopieren fehlgeschlagen ist
- Return False
- End Try
- End Using
- End Using
- End Function
Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen.