2012-03-23 3 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

ответ

0

К сожалению, нет прямых способ освободить ресурс, выделенный Image.Source, но не тот, о котором я знаю. Но есть разные способы избежать этого, по возможности.

Одно из возможных решений, когда вы знаете, что вы не будете манипулировать этим элементом, это сделать Freezable. В этом случае среда WPF не позволяет отслеживать события на этом объекте, поскольку вы объявили его «только для чтения». Таким образом, вы, в первую очередь, влизываете свое приложение в свое приложение.

Старый один, но все еще хорошая статья:

Finding Memory Leaks in WPF-based applications

Смежные вопросы