主页 > 知识库 > 基于.NET BitmapImage 内存释放问题的解决方法详解

基于.NET BitmapImage 内存释放问题的解决方法详解

热门标签:智能电话营销外呼系统 郑州400电话办理 联通 电销语音自动机器人 长春呼叫中心外呼系统哪家好 户外地图标注软件手机哪个好用 凯立德导航官网地图标注 莱芜外呼电销机器人价格 五常地图标注 地图标注和认领

网上查到的代码,多数的写法使用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();
}


您可能感兴趣的文章:
  • .Net Core内存回收模式及性能测试对比分析
  • asp.net中C#实现手动回收内存的方法
  • asp.net动态产生checkbox(数据源为DB或内存集合)
  • asp.net 获取机器硬件信息(cpu频率、磁盘可用空间、内存容量等)
  • .Net程序内存异常的原因及解决

标签:福州 西宁 岳阳 湖州 衢州 西藏 红河 宣城

巨人网络通讯声明:本文标题《基于.NET BitmapImage 内存释放问题的解决方法详解》,本文关键词  基于,.NET,BitmapImage,内存,;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 下面列出与本文章《基于.NET BitmapImage 内存释放问题的解决方法详解》相关的同类信息!
  • 本页收集关于基于.NET BitmapImage 内存释放问题的解决方法详解的相关信息资讯供网民参考!
  • 推荐文章