基于.NET BitmapImage 內(nèi)存釋放問(wèn)題的解決方法詳解
網(wǎng)上查到的代碼,多數(shù)的寫法使用MemoryStream來(lái)實(shí)現(xiàn):
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();
今天問(wèn)題來(lái)了,當(dāng)我設(shè)置了DecodeWidth為100時(shí)加載1000張圖片,照理說(shuō)內(nèi)存應(yīng)該維持100×100的1000張圖片,但事實(shí)上他保留了所以原始圖片的內(nèi)存直到BitmapImage被回收時(shí)才釋放,這讓我很尷尬,換句話說(shuō)using(MemoryStream)并沒(méi)有真正按我們預(yù)期釋放MemoryStream中的Buffer,那如何才能釋放呢?
其實(shí)最簡(jiǎn)單就是直接棄用MemoryStream轉(zhuǎn)投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();
}
相關(guān)文章
asp.net core MVC 過(guò)濾器之ActionFilter過(guò)濾器(2)
這篇文章主要為大家詳細(xì)介紹了asp.net core MVC過(guò)濾器之ActionFilter過(guò)濾器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08ASP.NET Core+Docker+Jenkins實(shí)現(xiàn)持續(xù)集成的完整實(shí)例
這篇文章主要給大家介紹了關(guān)于ASP.NET Core+Docker+Jenkins實(shí)現(xiàn)持續(xù)集成的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05.net實(shí)現(xiàn)動(dòng)態(tài)驗(yàn)證碼功能
這篇文章主要介紹了.net實(shí)現(xiàn)動(dòng)態(tài)驗(yàn)證碼功能,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04ASP.NET MVC 2右鍵菜單和簡(jiǎn)單分頁(yè)實(shí)例講解
在這里我們將討論的是通過(guò)一個(gè)插件實(shí)現(xiàn)ASP.NET MVC 2中的右鍵菜單和一個(gè)相當(dāng)簡(jiǎn)單的分頁(yè),希望對(duì)大家有所幫助。2015-09-09VS2012/VS2013本地發(fā)布網(wǎng)站問(wèn)題集錦(HTTP錯(cuò)誤代碼)
這篇文章主要為大家詳細(xì)介紹了VS2012/VS2013本地發(fā)布網(wǎng)站遇到問(wèn)題,HTTP錯(cuò)誤代碼的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04Asp.net TextBox的TextChanged事件使用介紹
動(dòng)態(tài)創(chuàng)建的控件是如何加載視圖狀態(tài),還提到ProcessPostData方法的調(diào)用,這里我就用TextBox的TextChanged事件來(lái)說(shuō)說(shuō)視圖數(shù)據(jù)的加載以及事件的觸發(fā)2012-12-12asp.net 支持多語(yǔ)言站點(diǎn)的實(shí)現(xiàn)方法
asp.net 支持多語(yǔ)言站點(diǎn)的實(shí)現(xiàn)方法,對(duì)于想用asp.net做多語(yǔ)言網(wǎng)站的朋友可以參考下,充分發(fā)揮asp.net的功能。2010-03-03asp.C#實(shí)現(xiàn)圖片文件與base64string編碼解碼
前些天在opera論壇里面當(dāng)了個(gè)flashblocker腳本文件,顧名思義,就是把網(wǎng)頁(yè)中的flash給過(guò)濾了,過(guò)濾之后呢就會(huì)在原位置顯示一張圖片,以前用firefox時(shí)的flash過(guò)濾插件也是這樣,而且顯示的圖片也一樣,一樣的難看,于是就想換換它。2010-03-03