WPF BitmapImage不处理

时间:2013-10-14 16:32:58

标签: wpf filestream idisposable

我已经从文件流数据库中加载了一个图像列表。当我最初加载它们时,内存跳转并不是那么大。当我在屏幕上显示它们时,即使在我处理了BitmapImage流源并将其设置为Nothing之后,我的内存使用量也会激增并且不会消失。

    Dim newItem As New MIdentifiedImage
    Dim data As Byte() = dt.Rows(i).Item("ScannedImage")
    Dim strm As New MemoryStream(data)

    Dim bi As New BitmapImage()
    bi.BeginInit()
    bi.StreamSource = strm
    bi.EndInit()
    bi.Freeze()
    newItem.ScannedImage = bi

这是我的处理代码

  For Each img In InvoiceObj.ImageList
    img.ScannedImage.StreamSource.Dispose()
    img.ScannedImage.StreamSource = Nothing

  Next

所以我的探查器说内存使用率很低,但是当我检查我的任务管理器时,内存使用率非常高。如果我继续加载超过1.5GB内存的图像,它就会停止在屏幕上显示图像。

1 个答案:

答案 0 :(得分:4)

您还需要清除ImageList。只需将StreamSource设置为null,就不会导致它删除已加载的数据。通过在完成后清除ImageList,您也允许GC清理实际的BitmapImage实例。