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

 更新时间:2013年05月15日 12:08:42   作者:  
本篇文章是对.NET BitmapImage 内存释放问题的解决方法进行了详细的分析介绍,需要的朋友参考下

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


相关文章

  • asp.net core MVC 过滤器之ActionFilter过滤器(2)

    asp.net core MVC 过滤器之ActionFilter过滤器(2)

    这篇文章主要为大家详细介绍了asp.net core MVC过滤器之ActionFilter过滤器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • ASP.NET Core+Docker+Jenkins实现持续集成的完整实例

    ASP.NET Core+Docker+Jenkins实现持续集成的完整实例

    这篇文章主要给大家介绍了关于ASP.NET Core+Docker+Jenkins实现持续集成的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-05-05
  • .net实现动态验证码功能

    .net实现动态验证码功能

    这篇文章主要介绍了.net实现动态验证码功能,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • ASP.NET MVC 2右键菜单和简单分页实例讲解

    ASP.NET MVC 2右键菜单和简单分页实例讲解

    在这里我们将讨论的是通过一个插件实现ASP.NET MVC 2中的右键菜单和一个相当简单的分页,希望对大家有所帮助。
    2015-09-09
  • VS2012/VS2013本地发布网站问题集锦(HTTP错误代码)

    VS2012/VS2013本地发布网站问题集锦(HTTP错误代码)

    这篇文章主要为大家详细介绍了VS2012/VS2013本地发布网站遇到问题,HTTP错误代码的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04
  • Asp.net TextBox的TextChanged事件使用介绍

    Asp.net TextBox的TextChanged事件使用介绍

    动态创建的控件是如何加载视图状态,还提到ProcessPostData方法的调用,这里我就用TextBox的TextChanged事件来说说视图数据的加载以及事件的触发
    2012-12-12
  • asp.net 支持多语言站点的实现方法

    asp.net 支持多语言站点的实现方法

    asp.net 支持多语言站点的实现方法,对于想用asp.net做多语言网站的朋友可以参考下,充分发挥asp.net的功能。
    2010-03-03
  • APS.NET MVC4生成二维码简单解析

    APS.NET MVC4生成二维码简单解析

    这篇文章主要介绍了APS.NET MVC4二维码的生成过程,需要的朋友可以参考下
    2015-11-11
  • asp.C#实现图片文件与base64string编码解码

    asp.C#实现图片文件与base64string编码解码

    前些天在opera论坛里面当了个flashblocker脚本文件,顾名思义,就是把网页中的flash给过滤了,过滤之后呢就会在原位置显示一张图片,以前用firefox时的flash过滤插件也是这样,而且显示的图片也一样,一样的难看,于是就想换换它。
    2010-03-03
  • ASP.Net 分页控件源码

    ASP.Net 分页控件源码

    由于.net自带的分页功能极其死板,自定义性不强不能满足需求 俺花了一个多星期的时间 写成的一个.net分页控件
    2007-03-03

最新评论