我已经从文件流数据库中加载了一个图像列表。当我最初加载它们时,内存跳转并不是那么大。当我在屏幕上显示它们时,即使在我处理了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内存的图像,它就会停止在屏幕上显示图像。
答案 0 :(得分:4)
您还需要清除ImageList
。只需将StreamSource
设置为null
,就不会导致它删除已加载的数据。通过在完成后清除ImageList
,您也允许GC清理实际的BitmapImage
实例。