WPF中的BitmapImage无法释放资源

3

我从文件流数据库中加载了一系列图像。当我最初加载它们时,内存跳动并不大。但是当我将它们显示在屏幕上时,内存使用量会急剧增加,即使我处理了BitmapImage streamsource并将其设置为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

这是我的dispose代码:

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

  Next

我的性能分析器显示内存使用率很低,但是当我在任务管理器中检查时,内存使用率却相当高。如果我继续加载图像,超过1.5GB的内存,它就停止在屏幕上显示图片。


1
除了Reed所说的之外,如果在调用EndInit之前将bi.CacheOption = BitmapCacheOption.OnLoad设置为true,则可以立即释放流,例如在此处所示[https://dev59.com/rXfZa4cB1Zd3GeqPXuyG#19347459]。 - Clemens
1个回答

4
您需要清空ImageList。只将StreamSource设置为null并不会删除已加载的数据。当您完成对ImageList的使用后,清空它可以使GC清理实际的BitmapImage实例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接