变量的内存问题

时间:2013-04-17 05:50:40

标签: c# memory-management

我已经阅读了很多关于内存管理的内容,但目前还有一些我无法掌握的内容。这可能看起来很尴尬,但下面的代码有

  1. 性能问题
  2. 内存浪费
  3. 此功能“位图b = Iprocessing.Colour_style(位图a)”获取灰度图像a并给出颜色并返回彩色图像b

    我一直认为,由于未使用new关键字,处理后的变量images[1]将替换旧内容,并且不会创建新内存。

    请赐教我

      for(int i=0; i<images.Count;i++)   {   
        images[i] = Iprocessing.Colour_style((Bitmap)images[i]);
      }
    

1 个答案:

答案 0 :(得分:0)

这里的变量iimages(甚至images我看不到声明也无法确定 - 它可能是一个领域)。 images这里只是(看起来像)List<Image>的引用 - 所以整个images是4或8个字节。列表本身将占用更多空间;有对象本身,加上支持数组,加上几个计数器。交换列表中的项目,就像交换数组中的元素一样,不涉及在列表/数组中分配任何额外的空间。

可能(几乎肯定是 )导致分配的一件事是IProcessing.Color_style。这样的声音将基于旧图像创建新图像(而不是更改旧图像)。此外,看起来很像你没有处理旧图像 - 所以如果这是唯一的地方你正在使用那个图像,你可能会造成一些问题:图像是IDisposable并且链接到GDI +句柄;如果你不处理它们,你可能会遇到OutOfMemoryException没有链接到内存但实际上是GDI +句柄的问题。特别是如果你有大量的备用内存,那么垃圾收集不会经常发生。当然,这也有点复杂,因为如果 在其他地方(在控件等上)使用该图像,那么 想要现在处理它!

一行不需要让new涉及分配(分配可以隐藏在方法调用,运算符,属性之后);同样,并非涉及new的每一行都需要分配(值类型在现有位置的顶部进行初始化)。