Ik heb een bepaalde functie die alle bytes van een bestand uit moet lezen om te kunnen werken. Alleen zijn deze bestanden af en toe zo'n 500 tot 700 MB groot... Als de functie afgelopen is blijft dit nog in het geheugen achter (volgens taakbeheer blijft het programmaatje die 700MB geheugen hebben)...
Hoe kan ik dit geheugen terugvragen?
ik heb de volgende dingen al (tevergeefs) geprobeerd:
Dit is de (zeer ingekorte variant) van de code waar het om gaat:
Hoe kan ik dit geheugen terugvragen?
ik heb de volgende dingen al (tevergeefs) geprobeerd:
- Erase rawBytes
- GC.Collect()
- For i As Integer = 0 to rawBytes.Length - 1
rawBytes = Nothing
Next
Dit is de (zeer ingekorte variant) van de code waar het om gaat:
Code:
Private Sub BGWA_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorkerA.DoWork
'... wat if-then controles
Dim FStream As New IO.FileStream(TextBoxBestand.Text, IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read)
'... wat code die de FileStream gebruikt
FStream.Seek(0, IO.SeekOrigin.Begin)
Try
Dim rawBytes(FStream.Length - 1) As Byte
If Not Annuleren Then FStream.Read(rawBytes, 0, FStream.Length)
'... wat code die de bytes nodig heeft
Catch OutOfMemoryEx As OutOfMemoryException
If Not Annuleren Then MessageBox.Show("...", "", MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
FStream.Close()
End Sub