[英]strange C# memory leak using GDI
this.Dispatcher.Invoke(
new Action(() =>
{
if (currentImage != null)
{
currentImage.Dispose();
currentImage = null;
}
this.currentImage = render.render(value);
this.mainImage.Source =
System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
currentImage.GetHbitmap(),
IntPtr.Zero,
Int32Rect.Empty,
System.Windows.Media.Imaging.BitmapSizeOptions.FromEmptyOptions());
}));
注意this.mainImage是WPF中的Image控制器。 我发现当我执行句子“this.mainImage.Source = XXXX”时有一些内存泄漏我发现没有办法释放this.mainImage.Source持有的内存
看起来您需要在从currentImage.GetHbitmap()检索的hbitmap上调用DeleteObject。 这是GetHbitmap的MSDN链接。
不幸的是,没有直接的方法来释放Image.Source
分配的资源,而不是我所知道的。 但是,有尽可能多的方法可以避免它。
当你知道你不会操纵那个元素时,可能的解决方案之一就是使它成为Freezable 。 在这种情况下,WPF框架避免跟踪该对象上的事件,因为您将其声明为“只读”。 因此,您可以显着提高应用程序的性能。
旧的,但仍然很好的文章:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.