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
所拥有的内存答案 0 :(得分:2)
看起来您需要在从currentImage.GetHbitmap()检索的hbitmap上调用DeleteObject。 Here's the MSDN link for GetHbitmap.
答案 1 :(得分:0)
不幸的是,没有直接的方式来释放由Image.Source
分配的资源,而不是我所知道的。但是有不同的方法可以避免它,尽可能。
当您知道不会操纵该元素时,可能的解决方案之一是将其设为Freezable。在这种情况下,WPF框架避免跟踪该对象上的事件,因为您将其声明为“只读”。因此,您可以显着提高应用程序的性能。
旧的,但仍然是好文章: