前段时间我发布了一个与 WriteableBitmap 内存泄漏相关的问题,虽然我收到了与该问题相关的精彩提示,但我仍然认为存在严重的错误/(我犯的错误)/(混淆)/(其他一些事情)这里。
所以,这又是我的问题:
假设我们有一个带有图像和按钮的 WPF 应用程序。图像的源是一个非常大的位图(3600 * 4800 像素),当它在运行时显示时,应用程序消耗约 90 MB。
现在假设我希望从图像源(真正的大图像)实例化一个 WriteableBitmap,当这种情况发生时,应用程序会消耗大约 220 MB。
现在到了棘手的部分,当对图像的修改(通过 WriteableBitmap)结束时,对 WriteableBitmap 的所有引用(至少我知道的那些)都被销毁(在方法结束时或通过设置它们为 null)应该释放 writeableBitmap 使用的内存,并且应用程序消耗应该返回到 ~90 MB。问题是有时它会返回,有时它不会。
这是一个示例代码:
// The Image's source whas set previous to this event
private void buttonTest_Click(object sender, RoutedEventArgs e)
{
if (image.Source != null)
{
WriteableBitmap bitmap = new WriteableBitmap((BitmapSource)image.Source);
bitmap.Lock();
bitmap.Unlock();
//image.Source = null;
bitmap = null;
}
}
如您所见,引用是本地的,应该在方法结束时释放内存(或者当垃圾收集器决定这样做时)。但是,该应用程序可能会消耗约 224 MB,直到宇宙尽头。
任何帮助都会很棒。