国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

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

2024-07-10 12:45:32
字體:
供稿:網(wǎng)友

網(wǎng)上查到的代碼,多數(shù)的寫法使用MemoryStream來實(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();

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜黄县| 临沭县| 兴义市| 山阳县| 科尔| 建湖县| 兰坪| 天台县| 内黄县| 门源| 乌兰县| 海兴县| 江门市| 广宁县| 新乡县| 苏尼特右旗| 长葛市| 台东县| 苍南县| 阿坝| 利辛县| 秭归县| 永顺县| 牡丹江市| 罗江县| 宜良县| 永寿县| 溧阳市| 佛坪县| 鄂托克旗| 四会市| 莱芜市| 砚山县| 拉孜县| 临沭县| 伊川县| 常熟市| 政和县| 建湖县| 姜堰市| 郴州市|