基于.NET BitmapImage 內(nèi)存釋放問題的解決方法詳解
網(wǎng)上查到的代碼,多數(shù)的寫法使用MemoryStream來實現(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();
今天問題來了,當我設置了DecodeWidth為100時加載1000張圖片,照理說內(nèi)存應該維持100×100的1000張圖片,但事實上他保留了所以原始圖片的內(nèi)存直到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();
}
相關文章
asp.net core MVC 過濾器之ActionFilter過濾器(2)
這篇文章主要為大家詳細介紹了asp.net core MVC過濾器之ActionFilter過濾器,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-08-08ASP.NET Core+Docker+Jenkins實現(xiàn)持續(xù)集成的完整實例
這篇文章主要給大家介紹了關于ASP.NET Core+Docker+Jenkins實現(xiàn)持續(xù)集成的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-05-05VS2012/VS2013本地發(fā)布網(wǎng)站問題集錦(HTTP錯誤代碼)
這篇文章主要為大家詳細介紹了VS2012/VS2013本地發(fā)布網(wǎng)站遇到問題,HTTP錯誤代碼的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-04-04Asp.net TextBox的TextChanged事件使用介紹
動態(tài)創(chuàng)建的控件是如何加載視圖狀態(tài),還提到ProcessPostData方法的調(diào)用,這里我就用TextBox的TextChanged事件來說說視圖數(shù)據(jù)的加載以及事件的觸發(fā)2012-12-12asp.C#實現(xiàn)圖片文件與base64string編碼解碼
前些天在opera論壇里面當了個flashblocker腳本文件,顧名思義,就是把網(wǎng)頁中的flash給過濾了,過濾之后呢就會在原位置顯示一張圖片,以前用firefox時的flash過濾插件也是這樣,而且顯示的圖片也一樣,一樣的難看,于是就想換換它。2010-03-03