基于.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();
}


相关文章

  • .NET9中Swagger平替Scalar使用详解

    .NET9中Swagger平替Scalar使用详解

    本文详细介绍了Swagger中常用功能在Scalar中的使用,包括版本说明、接口分类、接口及参数描述、枚举类型、文件上传和JWT认证等,并提供相关代码示例和效果展示,感兴趣的朋友跟随小编一起看看吧
    2024-11-11
  • Net Core全局配置读取管理方法ConfigurationManager

    Net Core全局配置读取管理方法ConfigurationManager

    这篇文章主要为大家详细介绍了Net Core全局配置读取管理方法ConfigurationManager的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • asp.net中IDataParameter调用存储过程的实现方法

    asp.net中IDataParameter调用存储过程的实现方法

    这篇文章主要介绍了asp.net中IDataParameter调用存储过程的实现方法,在asp.net数据库程序设计中非常具有实用价值,需要的朋友可以参考下
    2014-09-09
  • 生成代码从T到T1、T2、Tn自动生成多个类型的泛型实例代码

    生成代码从T到T1、T2、Tn自动生成多个类型的泛型实例代码

    这篇文章主要给大家介绍了关于生成代码从T到T1、T2、Tn自动生成多个类型的泛型的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起看看吧
    2018-09-09
  • asp.net实现调用存储过程并带返回值的方法

    asp.net实现调用存储过程并带返回值的方法

    这篇文章主要介绍了asp.net实现调用存储过程并带返回值的方法,结合实例形式较为详细的分析了asp.net存储过程调用的相关技巧,需要的朋友可以参考下
    2016-03-03
  • .NET下模拟数组越界的方法详解

    .NET下模拟数组越界的方法详解

    这篇文章主要给大家介绍了关于.NET下模拟数组越界的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01
  • ASP.NET Web应用程序出现Maximum request length exceeded报错的解决方法

    ASP.NET Web应用程序出现Maximum request length 

    ASP.NET Web应用中导出数据时出现500-Internal Server Error,原因是客户端请求长度超过了服务器配置的最大限制,解决方法在web.config增加maxRequestLength属性,单位为字节(Byte),本文介绍ASP.NET Web应用程序出现Maximum request length exceeded报错的原因,一起看看吧
    2024-12-12
  • Asp.net中将Word文件转换成HTML的方法

    Asp.net中将Word文件转换成HTML的方法

    这篇文章主要介绍了Asp.net中将Word文件转换成HTML的方法,需要的朋友可以参考下
    2014-08-08
  • asp.net core集成MongoDB的完整步骤

    asp.net core集成MongoDB的完整步骤

    前两天在学习MongoDB相关的知识,做了个小Demo,下面这篇文章主要给大家介绍了关于asp.net core集成MongoDB的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2018-10-10
  • ASP.NET MVC4 HtmlHelper扩展类,实现分页功能

    ASP.NET MVC4 HtmlHelper扩展类,实现分页功能

    本文主要做了一个HtmHelper类的分页扩展函数,方便在视图中调用,有需要的朋友可以参考一下,希望对大家有所帮助。
    2016-03-03

最新评论