Я прочитал почти все сообщения о байт-массивах в структуре .net и о том, как работает GC, но я все еще в недоумении. Во-первых, код, я работаю с:VB.Net ByteArray Memory Leak
Public Sub SomeFunction(ByVal page As Integer, ByVal xml As String)
Dim fileBytes As Byte()
Using imageStream As New IO.FileStream(_imageFile, IO.FileMode.Open)
fileBytes = Array.CreateInstance(GetType(Byte), imageStream.Length)
imageStream.Read(fileBytes, 0, imageStream.Length)
imageStream.Close()
End Using
Using ms As New IO.MemoryStream(fileBytes)
Dim tiff As New Atalasoft.Imaging.Codec.Tiff.TiffFile
tiff.Read(ms)
Dim tag = tiff.Images(page - 1).Tags.LookupTag(58000)
If tag IsNot Nothing Then
tiff.Images(page - 1).Tags.Remove(tag)
End If
tag = New Atalasoft.Imaging.Metadata.TiffTag(58000, System.Text.Encoding.ASCII.GetBytes(xml))
tiff.Images(page - 1).Tags.Add(tag)
tiff.Save(_imageFile)
End Using
End Sub
В начале метода, я устанавливаю fileBytes к Array.CreateInstance ... а потом к низу я спасаю файл изображения. Это означает, что я должен перезагружать ByteArray каждый раз, потому что файл меняется, на который я смотрю, поэтому я не могу просто повторно использовать. Все внутри с помощью операторов, а fileBytes ДОЛЖНЫ быть уничтожены, когда выполнение выходит из метода, но оно НИКОГДА не очищается, а память продолжает увеличиваться до тех пор, пока не произойдет исключение SystemOutOfMemoryException. Если GC не выпускает память до тех пор, пока она не требуется, предположительно, она не освобождает ее здесь, даже если она нужна. Как я могу заставить fileBytes освобождать свою память между вызовами SomeFunction()?
Спасибо!
Вы пытались определить 'fileBytes' вне функции (как переменная уровня класса?) – vbnet3d
Байт-массивы dont/can not leak. Более похоже, что файл TIFF хотел бы быть удаленным. Если у него есть метод «Dispose», используйте его. – Plutonix
Хорошо, возможно, «утечка» - это неправильное слово, но это определенно файлBytes(), который не освобождает память, поскольку я прошел через нее и могу наблюдать, как она увеличивается каждый раз, когда она установлена, а затем она никогда не выпускается. – DonnieDarko