zoukankan      html  css  js  c++  java
  • 可遇不可求的Question之Bitmap内存不足的浅析

    在使用Bitmap类进行图像处理的时候。经常会遇到内存不足的异常。

    我们通常都会注意到这类问题是由于Bitmap类资源没有及时释放所造成的,通过显示Dispose方法来清除对象占用的内存。

    但是有时候即使使用了Dispose方法来清除对象占用的内存,依然会遇到内存溢出的情况。

    比如以下的代码:

    using (Bitmap bmpInput = new Bitmap(fileInfo.FullName))
    {

      bmpInput.Clone(recOutput, PixelFormat.DontCare).Save(filename1, ImageFormat.Jpeg);
          bmpInput.Dispose();

    }

    实际上在一些Bitmap类的封装方法中会产生一些隐性的引用对象,这些引用对象一样会占用到大量资源,如果对于此类“隐性”资源没有实时释放,依然会占用大量内存直至内存溢出。

    所以使用Dispose方法清除对象是,必须把所有引用的对象也同时Dispose掉。

    在上述代码中bmpInput.Clone(recOutput, PixelFormat.DontCare)方法实际上就会隐性的产生一个引用对象资源。因此,实际上我们在释放资源的时候也必须把这个资源释放掉。

    上述代码修改为以下代码:

    代码
    using (Bitmap bmpInput = new Bitmap(fileInfo.FullName))
    {

                 
    using (Bitmap bmpOutput1 = bmpInput.Clone(recOutput, PixelFormat.DontCare))
                 {
                            bmpOutput1.Save(filename1, ImageFormat.Jpeg);
                            bmpOutput1.Dispose();
                 }

    }

  • 相关阅读:
    [转]字符串相似度算法(编辑距离算法 Levenshtein Distance)
    [转]Earth Mover's Distance (EMD)
    [转]相似度计算常用方法综述
    小和问题和逆序对问题
    递归的理解
    验证方法是否正确——对数器
    CSS的几个核心概念(复盘大纲~)
    CSS3过渡
    CSS经典布局
    CSS3边框和圆角
  • 原文地址:https://www.cnblogs.com/tigerjacky/p/1839843.html
Copyright © 2011-2022 走看看