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

首頁 > 編程 > .NET > 正文

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

2024-07-10 13:16:25
字體:
來源:轉載
供稿:網友

網上查到的代碼,多數的寫法使用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();
}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 博野县| 榆林市| 桑日县| 手机| 岳池县| 青州市| 河西区| 军事| 固镇县| 依安县| 麦盖提县| 麻栗坡县| 鄂托克前旗| 铅山县| 毕节市| 通江县| 青州市| 南投市| 九寨沟县| 文山县| 阿拉善左旗| 集安市| 习水县| 镇巴县| 荣成市| 右玉县| 祁阳县| 页游| 常宁市| 白沙| 军事| 云南省| 霍林郭勒市| 伊通| 张北县| 旬阳县| 新化县| 西昌市| 瑞金市| 云龙县| 宕昌县|