Moin zusammen
Ich habe gleich 2 Fragen bzgl der "Geschwindigkeit" von Programmen und der Geschwindigkeit beim kopieren und zippen.
1.) Gestern habe ich gelesen, das die Geschwindigkeits Unterschiede zwischen VB.net und C# Programmen gar nicht so gravierend sein sollen.
2.) Ich habe nun meinen Code bzgl des copy und zip noch etwas "verbessert".
Nun wollte ich mal fragen ob das "gute" Werte sind.
Gegeben ist ein PC mit folgendem:
I3 3225 mit 3,3GHz 16GB RAM Win 7 64Bit
Quelle ist ein USB-SDCardreader
Ziele sind eine SSD Intern (copy-function) und eine USB-Festplatte (zip-funktion)
Mein kompilierter Code ist auch in 64Bit
Das ganze Kopieren und Zippen von 10GB Daten, eine Datei hat im Schnitt 25MB dauerte nun knapp 10 Minuten.
Hier mein Code mit dem ich kopiere und zippe:
Kann man das noch beschleunigen
Spoiler anzeigen
Ich habe gleich 2 Fragen bzgl der "Geschwindigkeit" von Programmen und der Geschwindigkeit beim kopieren und zippen.
1.) Gestern habe ich gelesen, das die Geschwindigkeits Unterschiede zwischen VB.net und C# Programmen gar nicht so gravierend sein sollen.
2.) Ich habe nun meinen Code bzgl des copy und zip noch etwas "verbessert".
Nun wollte ich mal fragen ob das "gute" Werte sind.
Gegeben ist ein PC mit folgendem:
I3 3225 mit 3,3GHz 16GB RAM Win 7 64Bit
Quelle ist ein USB-SDCardreader
Ziele sind eine SSD Intern (copy-function) und eine USB-Festplatte (zip-funktion)
Mein kompilierter Code ist auch in 64Bit
Das ganze Kopieren und Zippen von 10GB Daten, eine Datei hat im Schnitt 25MB dauerte nun knapp 10 Minuten.
Hier mein Code mit dem ich kopiere und zippe:
Kann man das noch beschleunigen
VB.NET-Quellcode
-
- Private Function DoFileZip() As Boolean
- Dim FiledateSuffix As String = Date.Now.ToString("-HH_mm")
- If Not Directory.Exists(propertyValues.TargetZipPath) Then Directory.CreateDirectory(propertyValues.TargetZipPath)
- RaiseEvent ZipFileReport(propertyValues.TargetZipPath & FiledateSuffix)
- Dim bufferSize As Integer = 1024 * 1024 ' 512 KB, die Größe anpassen
- Using zipToOpen As FileStream = New FileStream(propertyValues.TargetZipPath & FiledateSuffix & ".zip", FileMode.Create)
- Using archive As New ZipArchive(zipToOpen, ZipArchiveMode.Create)
- For Each file As String In Directory.GetFiles(propertyValues.SourcePath)
- Dim fileName As String = Path.GetFileName(file)
- Using sourceStream As New FileStream(file, FileMode.Open)
- Using entryStream As Stream = archive.CreateEntry(fileName).Open()
- Dim buffer(bufferSize - 1) As Byte
- Dim bytesRead As Integer
- Do
- bytesRead = sourceStream.Read(buffer, 0, bufferSize)
- If bytesRead > 0 Then
- entryStream.Write(buffer, 0, bytesRead)
- End If
- Loop While bytesRead > 0
- End Using
- End Using
- Next
- End Using
- End Using
- If Not System.IO.Directory.GetFiles(propertyValues.TargetZipPath).Length = 0 Then
- Else
- IO.Directory.Delete(propertyValues.TargetZipPath)
- End If
- Return True
- End Function
- Private Function DoFileCopy() As Boolean
- Dim NewSourcePath As New IO.DirectoryInfo(propertyValues.SourcePath)
- Dim file As IO.FileInfo
- If IO.Directory.Exists(propertyValues.TargetCopyPath) = False Then IO.Directory.CreateDirectory(propertyValues.TargetCopyPath)
- Dim bufferSize As Integer = 1024 * 1024 ' 512 KB, die Größe anpassen
- For Each file In NewSourcePath.GetFiles()
- RaiseEvent CopyFileReport(propertyValues.TargetCopyPath & "\" & file.Name)
- Using sourceStream As New FileStream(file.FullName, FileMode.Open)
- Using targetStream As New FileStream(propertyValues.TargetCopyPath & "\" & file.Name, FileMode.Create)
- Dim buffer(bufferSize - 1) As Byte
- Dim bytesRead As Integer
- Do
- bytesRead = sourceStream.Read(buffer, 0, bufferSize)
- If bytesRead > 0 Then
- targetStream.Write(buffer, 0, bytesRead)
- End If
- Loop While bytesRead > 0
- End Using
- End Using
- Next
- For Each subdir In NewSourcePath.GetDirectories()
- Call SubfolderCopy(subdir.FullName, propertyValues.TargetCopyPath & "\" & subdir.Name, True, bufferSize)
- Next
- Return True
- End Function
- Private Sub SubfolderCopy(ByVal SubSource As String, ByVal Destination As String, ByVal Overwrite As Boolean, ByVal bufferSize As Integer)
- Dim subdir As IO.DirectoryInfo
- Dim diSubSource As New IO.DirectoryInfo(SubSource)
- Dim file As IO.FileInfo
- If IO.Directory.Exists(Destination) = False Then IO.Directory.CreateDirectory(Destination)
- For Each file In diSubSource.GetFiles()
- RaiseEvent CopyFileReport(file.FullName)
- Using sourceStream As New FileStream(file.FullName, FileMode.Open)
- Using targetStream As New FileStream(Destination & "\" & file.Name, FileMode.Create)
- Dim buffer(bufferSize - 1) As Byte
- Dim bytesRead As Integer
- Do
- bytesRead = sourceStream.Read(buffer, 0, bufferSize)
- If bytesRead > 0 Then
- targetStream.Write(buffer, 0, bytesRead)
- End If
- Loop While bytesRead > 0
- End Using
- End Using
- Next
- For Each subdir In diSubSource.GetDirectories()
- Call SubfolderCopy(subdir.FullName, Destination & "\" & subdir.Name, Overwrite, bufferSize)
- Next
- End Sub
Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen.