Mar*_*rio 6 wpf memory-leaks writeablebitmap
我正在试图找出如何释放WriteableBitmap内存.
在下一部分代码中,我填充了一个WriteableBitmap的后备缓冲区,其中包含来自"BigImage"(3600*4800 px,仅用于测试)的大量数据.如果我评论位图和图像等于null的行,那么内存即使不再使用图像和位图,它也不会发布,应用程序消耗大约230 MB!
正如您在代码末尾所看到的,调用GC.Collect()来释放内存是必要的.
所以问题是,释放WriteableBitmap对象使用的内存的正确方法是什么?GC.Collect()是唯一的方法吗?
任何帮助都会很棒.
PS.对不起,我的英语不好.
private void buttonTest_Click(object sender, RoutedEventArgs e)
{
Image image = new Image();
image.Source = new BitmapImage(new Uri("BigImage"));
WriteableBitmap bitmap = new WriteableBitmap(
(BitmapSource)image.Source);
bitmap.Lock();
// Bitmap processing
bitmap.Unlock();
image = null;
bitmap = null;
GC.Collect();
}
Run Code Online (Sandbox Code Playgroud)
image在不设置和bitmapto 的情况下强制执行 GCnull不会清除它们,因为它们仍在本地引用,因此被视为根引用。这与 GC 工作原理无关,WriteableBitmap更多的是关于 GC 工作原理的问题。
如果您不将它们设置为null并且不强制进行垃圾回收,那么一旦方法存在并且发生 GC,它们就会被回收。上面建议您自己强制收集,因为您可能会损害而不是帮助性能。