繁体   English   中英

奇怪的C#内存泄漏使用GDI

[英]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框架避免跟踪该对象上的事件,因为您将其声明为“只读”。 因此,您可以显着提高应用程序的性能。

旧的,但仍然很好的文章:

在基于WPF的应用程序中查找内存泄漏

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM