gpt4 book ai didi

wpf - .net4 中仍然存在内存泄漏 - 将内存 BitmapImage 绑定(bind)到 Image-Source

转载 作者:行者123 更新时间:2023-12-05 00:01:23 25 4
gpt4 key购买 nike

我知道过去在这里问过非常相似的问题 - 但都没有解决我的问题的方法:

我将内存中的图像加载到 BitmapImage 中:

    private static BitmapImage LoadImage(byte[] imageData)
{
if (imageData == null || imageData.Length == 0) return null;
var image = new BitmapImage();
using (var mem = new MemoryStream(imageData))
{
mem.Position = 0;
image.BeginInit();
image.CreateOptions = BitmapCreateOptions.PreservePixelFormat;
image.CacheOption = BitmapCacheOption.OnLoad;
image.UriSource = null;
image.StreamSource = mem;
image.EndInit();
}
image.Freeze();
return image;
}

然后使用它(通过 INotifyPropertyChange)将生成的 BitmapImage 绑定(bind)到图像对象的源(在页面上)。

问题是:这会泄漏内存(在我的情况下,2-3 张图片最多可达 300MB!)

您甚至无法使用 Profilers 找到它 - 只有 .net Memory Profiler 让我走上正轨(因为它在所有字节所在的非托管内存中 - 所以 ANTS 告诉我“.NET 正在使用 367 的 19,24MB,分配给应用程序的总私有(private)字节数为 3MB”——不错): Memory-Profiler output

enter image description here

无论我尝试什么 - 我都无法消除这种泄漏。尝试过(一次全部):

  • 清除可视化树/卸载时删除图像
  • 将图像源设置为空
  • 在 Rectangle 中使用 ImageBrush 而不是 Image
  • 不处理 MemoryStream 的其他 CacheOptions
  • 不要卡住图像

我不明白这个 - 真的!一旦我停止使用源中的图像,一切正常(无泄漏)。

有人我可以尝试任何选项吗?

备注似乎这根本不是错误(请参阅我的第二条评论)——我必须检查一下,所以我现在让这个问题开放——也许这也有助于解决其他问题

最佳答案

抱歉,这确实不是“BUG”,而是高分辨率图片造成的。

如果我应该删除这个问题或者我是否应该把它留在这里,请对此发表评论,因为其他人可能会遇到同样的情况......

关于wpf - .net4 中仍然存在内存泄漏 - 将内存 BitmapImage 绑定(bind)到 Image-Source,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9175755/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com