相关疑难解决方法(0)

如何处理可写位图?(WPF)

前段时间我发布了一个与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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,引用是本地的,并且应该在方法结束时释放内存(或者当垃圾收集器决定这样做时).但是,该应用程序可能消耗~224 MB直到宇宙结束.

任何帮助都会很棒.

memory dispose writeablebitmap

8
推荐指数
1
解决办法
7896
查看次数

标签 统计

dispose ×1

memory ×1

writeablebitmap ×1