【问题标题】:VB.Net ByteArray Memory LeakVB.Net ByteArray 内存泄漏
【发布时间】:2016-03-28 19:27:03
【问题描述】:

我已经阅读了几乎所有关于 .net 框架中的字节数组以及 GC 工作原理的帖子,但我仍然不知所措。首先,我正在使用的代码:

    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,因为我正在查看的文件正在更改,所以我不能只是重复使用。一切都在 using 语句中,并且当执行离开方法时应该销毁 fileBytes,但它永远不会被清除,并且内存不断增加,直到发生 SystemOutOfMemoryException。如果 GC 直到据称需要它才释放内存,那么即使需要它,它也不会在这里释放它。如何让 fileBytes 在调用 SomeFunction() 之间释放其内存?

谢谢!

【问题讨论】:

  • 您是否尝试过在函数外部定义fileBytes(作为类级变量?)
  • 字节数组不会/不能泄漏。 TIFF 文件更可能被处理。如果它有Dispose 方法,请使用它。
  • 好的,也许“泄漏”是错误的词,但绝对是 fileBytes() 没有释放内存,因为我已经逐步完成了它并且可以看到它每次设置时都会增加,然后它永远不会释放。
  • TIFF 文件没有 dispose 方法。而这并不是保留记忆的东西。我特意询问如何从字节数组中释放内存。谢谢。
  • vbnet3d,是的,我已经尝试过了(这就是最初的做法),但我得到了完全相同的结果。

标签: vb.net memory-leaks garbage-collection


【解决方案1】:

我尝试了一些方法,从外部传入字节数组,还创建了一个单独的类来执行处理并在每一轮中被销毁。都没有奏效。所以我最后只是退后一步,看着它。无需为每个页面创建数组,然后在将注释添加到单个页面后保存文档。我更改了它,以便在遍历每个页面并添加该页面的注释之前获取一次数组,然后在最后保存一次。真的很简单,只需要退后一步,以不同的方式看待它,而不是假设已经存在的东西是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2013-01-20
    • 2011-10-31
    • 2019-08-10
    • 2013-06-24
    相关资源
    最近更新 更多