【发布时间】:2009-10-08 00:30:40
【问题描述】:
前段时间我发布了一个与 WriteableBitmap 内存泄漏有关的问题,虽然我收到了与该问题相关的精彩提示,但我仍然认为存在严重的错误/(我犯的错误)/(混淆)/(一些其他东西)在这里。
所以,这又是我的问题:
假设我们有一个带有图像和按钮的 WPF 应用程序。图像的源是一个非常大的位图(3600 * 4800 px),当它在运行时显示时,应用程序消耗大约 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。
任何帮助都会很棒。
【问题讨论】:
标签: memory dispose writeablebitmap