Ich habe eine Routine zum Ver- und Entschlüsseln von Dateien. Da ganze Verzeichnisse dateiweise verschlüsselt werden, sind dabei gelegentlich recht große Datenmengen zu verarbeiten.
Wenn ich die Dateien einzeln verarbeite klappt das auch problemlos. Wenn ich das aber in einer Schleife für ein Verzeichnis mache, kriege ich nach 4 - 5 Dateien eine "OutOfMemory" Exception. Irgendwie werden Ressourcen also nicht richtig freigegeben.
Mein Rahmencode sieht ungefähr so aus:
bytFileBuffer und bytFileBufferEncrypted können recht groß werden (4 - 10 MB). Macht es Sinn, die am Ende der Funktion zu löschen? Und wie würde man das machen?
Im Task Manager sehe ich eigentlich nix besonderes ... der belegte Speicher geht auf bis zu 900 KB hoch ... sinkt dann aber wieder auf 200-300KB ... bis dann irgendwann die Memory Exception zuschlägt!
Wo sollte ich ansetzen? Irgendwie wird da wohl eine "Garbage Collection" empfohlen. GC.irgendwas? Aber so richtig klar ist mir das nicht geworden.
Wenn ich die Dateien einzeln verarbeite klappt das auch problemlos. Wenn ich das aber in einer Schleife für ein Verzeichnis mache, kriege ich nach 4 - 5 Dateien eine "OutOfMemory" Exception. Irgendwie werden Ressourcen also nicht richtig freigegeben.
Mein Rahmencode sieht ungefähr so aus:
VB.NET-Quellcode
- Private Function ProcFile(ByVal strObject As String) As Integer
- Dim bytFileBuffer As Byte()
- Try
- bytFileBuffer = File.ReadAllBytes(strObject)
- ...
- End Try
- Dim bytFileBufferEncrypted As Byte()
- Dim wrapper As New Simple3Des(txtPwrd.Text)
- Try
- bytFileBufferEncrypted = wrapper.EncryptData(bytFileBuffer)
- ...
- End Try
- Try
- File.WriteAllBytes(strNewObject, bytFileBufferEncrypted)
- ...
- End try
- Return vbOK
- End Function
bytFileBuffer und bytFileBufferEncrypted können recht groß werden (4 - 10 MB). Macht es Sinn, die am Ende der Funktion zu löschen? Und wie würde man das machen?
Im Task Manager sehe ich eigentlich nix besonderes ... der belegte Speicher geht auf bis zu 900 KB hoch ... sinkt dann aber wieder auf 200-300KB ... bis dann irgendwann die Memory Exception zuschlägt!
Wo sollte ich ansetzen? Irgendwie wird da wohl eine "Garbage Collection" empfohlen. GC.irgendwas? Aber so richtig klar ist mir das nicht geworden.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Peter329“ ()