从一个ImageList获取图像时,我患有OutOfMemoryException我一直无法找到问题的合适解决方案。ImageList/Image OutOfMemoryException
我有一个自定义ListView控件,它附加了一个用于绘制ListViewItems的事件。然后调用一个静态方法来设计该项目。
对于大约300个项目的ListView,每次滚动ListView时,我们都会让内存跳到100Mb左右。有问题的代码已经被追查到以下几点:
Image image = item.ImageList.Images[item.ImageKey];
if (image != null)
{
Size imageOffset = new Size((bounds.Width - image.Width)/2, 2);
Point imagePosition = bounds.Location + imageOffset;
graphics.DrawImageUnscaled(image, imagePosition);
}
看来(当然在WinXP)表示,垃圾收集工作不正常,导致内存盘旋。我们尝试添加一个image.Dispose()直接在代码块之后来解决问题,但这没有任何作用。
到目前为止我设法找到的唯一解决方案是在调用GC.Collect()的静态方法的末尾。然而,这个问题是,它会导致ListView缓慢地重新绘制自己,并且当它试图重新绘制时,最终会在屏幕上出现工件。
有没有其他人经历过这个?或者知道解决方法?
我已经经历了两个不同的应用程序,他们都不涉及图像或ListView outofmemoryexceptions。不幸的是,我能够找到的唯一解决方案是经常调用GC.Collect()。 – Crispy 2009-05-19 13:36:07