基于.NET BitmapImage 內存釋放問題的解決方法詳解_.Net教程

      編輯Tag賺U幣

      推薦:解析WPF綁定層次結構數據的應用詳解
      本文講述WPF中單層次數據和多層次數據的綁定方法,主要闡述數據綁定的顯示層面,其中涉及了ListBox和Treeview控件。并說明它們之間的差異

      網上查到的代碼,多數的寫法使用MemoryStream來實現:

      復制代碼 代碼如下:www.wf0088.com

      new Thread(new ThreadStart(() => {
      var bitmap = new BitmapImage();
      bitmap.BeginInit();

      using (var stream = new MemoryStream(File.ReadAllBytes(...))) {
      bitmap.StreamSource = stream;
      bitmap.CacheOption = BitmapCacheOption.OnLoad;
      bitmap.EndInit();
      bitmap.Freeze();

      }
      this.Dispatcher.Invoke((Action)delegate {
      Image1.Source = bitmap;

      });

      })).Start();


      今天問題來了,當我設置了DecodeWidth為100時加載1000張圖片,照理說內存應該維持100×100的1000張圖片,但事實上他保留了所以原始圖片的內存直到BitmapImage被回收時才釋放,這讓我很尷尬,換句話說using(MemoryStream)并沒有真正按我們預期釋放MemoryStream中的Buffer,那如何才能釋放呢?
      其實最簡單就是直接棄用MemoryStream轉投FileStream,如下:
      復制代碼 代碼如下:www.wf0088.com

      using (var stream = new FileStream(path, FileMode.Open)) {
      image.BeginInit();
      image.StreamSource = stream;

      image.DecodePixelWidth = 100;

      image.CacheOption = BitmapCacheOption.OnLoad;
      image.EndInit();
      image.Freeze();
      }


      分享:解析WPF實現音頻文件循環順序播放的解決方法
      本篇文章是對WPF實現音頻文件循環順序播放的方法進行了詳細的分析介紹,需要的朋友參考下

      來源:模板無憂//所屬分類:.Net教程/更新時間:2013-05-16
      相關.Net教程