2012-03-23 86 views
0
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中的图像控制器。 我发现有一些内存泄漏当我执行了句“this.mainImage.Source = XXXX” 我发现没有办法释放被this.mainImage.Source举行的内存奇怪的C#内存泄漏使用GDI

+1

可能值得把这个改为一个问题。 – KingCronus 2012-03-23 16:42:15

回答

0

不幸的是没有直线前进发布Image.Source分配的资源的方式,不是我所知道的。但有不同的方法可以避免它,尽可能多

可能的解决方案之一,当您知道您的不会操纵该元素时,使其成为Freezable。在这种情况下,WPF框架避免跟踪该对象上的事件,因为您声明它是“只读”的。所以你明显地改变了你的应用程序的性能。

旧的,但还是不错的文章:

Finding Memory Leaks in WPF-based applications