2012-03-23 5 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で開催されたメモリを解放する方法はありません見つけ 「this.mainImage.Source = XXXX」私は文を実行したときに、いくつかのメモリリークがある見つけGDIを使用した奇妙なC#メモリリーク

+1

これは疑問に思うかもしれません。 – KingCronus

答えて

0

残念ながらまっすぐ進む一切ありません私が気づいているのではなく、Image.Sourceによって割り当てられたリソースを解放する方法。しかし、それを避けるためのさまざまな方法があります。は可能な限りです。

可能な解決策の1つは、がその要素を操作しないことがわかっている場合、それをFreezableにします。この場合、WPFフレームワークは、オブジェクトを「読み取り専用」と宣言したときに、そのオブジェクトのイベントをトレースすることを避けます。つまり、あなたはあなたのアプリケーションのパフォーマンスを特に魅了します。

旧1、それでも良い記事:

Finding Memory Leaks in WPF-based applications

関連する問題