【问题标题】:WPF BitmapImage Doesn't DisposeWPF BitmapImage 不处理
【发布时间】:2013-10-14 16:32:57
【问题描述】:

我已经从文件流数据库中加载了一个图像列表。当我最初加载它们时,内存跳跃并没有那么大。当我在屏幕上显示它们时,我的内存使用量会激增并且即使在我处理掉 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 内存的图像,它只会停止在屏幕上显示图像。

【问题讨论】:

  • 除了 Reed 所说的,如果你在调用 EndInit 之前设置了bi.CacheOption = BitmapCacheOption.OnLoad,你可以立即处理流,如图所示。 here.

标签: wpf filestream idisposable


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    相关资源
    最近更新 更多