• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    基于.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();
    }


    您可能感兴趣的文章:
    • .Net Core内存回收模式及性能测试对比分析
    • asp.net中C#实现手动回收内存的方法
    • asp.net动态产生checkbox(数据源为DB或内存集合)
    • asp.net 获取机器硬件信息(cpu频率、磁盘可用空间、内存容量等)
    • .Net程序内存异常的原因及解决
    上一篇:Web里URL空格的转换方法
    下一篇:解析WPF绑定层次结构数据的应用详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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