在循环中,我反复这样做:
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的副本,是真的吗?
答案 0 :(得分:1)
由于课程Bitmap
派生自Image
,因此会实施IDisposable
。因此,您需要在不再需要时处置Bitmap
,这可以通过显式调用Dispose
来完成,但首选方法是尽可能使用using
关键字。
答案 1 :(得分:1)
它会从您的流中创建新对象。更糟糕的是,它分配本机资源,而不是必须处理它,如果你不需要它。要使用图像副本,只需复制位图对象参考:
AER