重复调用新的Bitmap() - 空间不足?

时间:2015-05-04 14:10:02

标签: c# .net

在循环中,我反复这样做:

 for (int r=1;r<100;r++)
 {
     for (int c=1;c<100;c++)
     {
          Bitmap b = new Bitmap(
              GetResourceStream("myapp.res.icon.png",
              System.Reflection.Assembly.GetExecutingAssembly());

          grid.SetCellImage(r, c, b);
     }
 }

位图是一个小图标(16x16像素)。但过了一段时间我得到“无效参数”。

重复调用此程序可以填满内存吗?我以某种方式假设这个语句只是在资源中提供了一个指向Bitmap的指针,但它似乎每次都实际创建一个Bitmap的副本,是真的吗?

2 个答案:

答案 0 :(得分:1)

由于课程Bitmap派生自Image,因此会实施IDisposable。因此,您需要在不再需要时处置Bitmap,这可以通过显式调用Dispose来完成,但首选方法是尽可能使用using关键字。

答案 1 :(得分:1)

它会从您的流中创建新对象。更糟糕的是,它分配本机资源,而不是必须处理它,如果你不需要它。要使用图像副本,只需复制位图对象参考:

AER