從一個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