佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 基于.NET BitmapImage 內存釋放問題的解決方法詳解

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

熱門標簽:科大訊飛語音識別系統 電子圍欄 Mysql連接數設置 阿里云 Linux服務器 服務器配置 銀行業(yè)務 團購網站

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

復制代碼 代碼如下:

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,如下:
復制代碼 代碼如下:

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

    image.DecodePixelWidth = 100;

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


您可能感興趣的文章:
  • .Net Core內存回收模式及性能測試對比分析
  • asp.net中C#實現手動回收內存的方法
  • asp.net動態(tài)產生checkbox(數據源為DB或內存集合)
  • asp.net 獲取機器硬件信息(cpu頻率、磁盤可用空間、內存容量等)
  • .Net程序內存異常的原因及解決

標簽:蚌埠 衢州 衡水 廣元 棗莊 江蘇 萍鄉(xiāng) 大理

巨人網絡通訊聲明:本文標題《基于.NET BitmapImage 內存釋放問題的解決方法詳解》,本文關鍵詞  ;如發(fā)現本文內容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    五大连池市| 鲜城| 文山县| 西城区| 陇川县| 宁南县| 溧水县| 朝阳区| 张家界市| 磐安县| 玛多县| 东兰县| 根河市| 清丰县| 呼图壁县| 馆陶县| 曲靖市| 微博| 永清县| 涟水县| 东安县| 西昌市| 个旧市| 沙坪坝区| 临夏县| 宾川县| 蒲江县| 衡东县| 古田县| 北流市| 阳朔县| 乐陵市| 高邑县| 南部县| 沾化县| 泽库县| 邵东县| 三原县| 安新县| 阿拉善左旗| 兴文县|