我有一個foreach循環,我用圖像做一些操作。運行此代碼時,我得到一個OutOfMemoryException
50+圖像;因爲圖像實例每個都是15 + MB。垃圾收集器在foreach循環中太慢?
var files = Directory.GetFiles(path).ToList();
foreach (var file in files)
{
Image image = new Bitmap(file);
//Do some operations
}
我刪除了主邏輯,因爲這個小問題仍然存在。當我在foreach循環中添加GC.Collect();
時,問題消失了,我沒有發現異常。
我的問題是:垃圾收集器是否太慢,無法清除不再需要的圖像,而無需調用Collect
方法或我缺少其他東西?
以前從未發現過這個問題。我從來沒有想過會有問題,因爲//Do some operations
部分需要約1秒的每個圖像。我認爲應該有足夠的時間用於垃圾收集器。
以及你沒有真正有一個選擇,如果你得到OutOfMemoryExceptions。另外你的意思是太慢? –
@PaulF不是重複的。 OP在問別的東西 –
@YvetteColomb:據我所見,它是重複的 - 使用Bitmaps時,OP會遇到內存不足的問題 - 這是因爲GC不會自動處理非託管內存。給出的解決方案回答了問題。另請參閱下面Romano的回答。 – PaulF