WPF WriteableBitmap内存泄漏?

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)

Ken*_*art 0

image在不设置和bitmapto 的情况下强制执行 GCnull不会清除它们,因为它们仍在本地引用,因此被视为根引用。这与 GC 工作原理无关,WriteableBitmap更多的是关于 GC 工作原理的问题。

如果您不将它们设置为null并且不强制进行垃圾回收,那么一旦方法存在并且发生 GC,它们就会被回收。上面建议您自己强制收集,因为您可能会损害而不是帮助性能。