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

基于.NET BitmapImage 內(nèi)存釋放問題的解決方法詳解

熱門標(biāo)簽:智能電話營銷外呼系統(tǒng) 鄭州400電話辦理 聯(lián)通 電銷語音自動機(jī)器人 長春呼叫中心外呼系統(tǒng)哪家好 戶外地圖標(biāo)注軟件手機(jī)哪個好用 凱立德導(dǎo)航官網(wǎng)地圖標(biāo)注 萊蕪?fù)夂綦婁N機(jī)器人價格 五常地圖標(biāo)注 地圖標(biāo)注和認(rèn)領(lǐng)

網(wǎng)上查到的代碼,多數(shù)的寫法使用MemoryStream來實現(xiàn):

復(fù)制代碼 代碼如下:

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();


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

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內(nèi)存回收模式及性能測試對比分析
  • asp.net中C#實現(xiàn)手動回收內(nèi)存的方法
  • asp.net動態(tài)產(chǎn)生checkbox(數(shù)據(jù)源為DB或內(nèi)存集合)
  • asp.net 獲取機(jī)器硬件信息(cpu頻率、磁盤可用空間、內(nèi)存容量等)
  • .Net程序內(nèi)存異常的原因及解決

標(biāo)簽:福州 西寧 岳陽 湖州 衢州 西藏 紅河 宣城

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《基于.NET BitmapImage 內(nèi)存釋放問題的解決方法詳解》,本文關(guān)鍵詞  基于,.NET,BitmapImage,內(nèi)存,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《基于.NET BitmapImage 內(nèi)存釋放問題的解決方法詳解》相關(guān)的同類信息!
  • 本頁收集關(guān)于基于.NET BitmapImage 內(nèi)存釋放問題的解決方法詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章