我使用foreach/IQueryable和LINQ-to-SQL遍歷一個小型(〜10GB)表。 看起來是這樣的:使用foreach對IQueryable進行迭代會導致內存不足異常
using (var conn = new DbEntities() { CommandTimeout = 600*100})
{
var dtable = conn.DailyResults.Where(dr => dr.DailyTransactionTypeID == 1);
foreach (var dailyResult in dtable)
{
//Math here, results stored in-memory, but this table is very small.
//At the very least compared to stuff I already have in memory. :)
}
}
Visual Studio調試器在foreach循環的基礎拋出一小會兒後,一個不折不扣的內存異常。我假設dtable的行沒有被刷新。該怎麼辦?
那你已經存儲在內存中是大於10GB?你的意思是10 MB? – msarchet 2010-09-10 21:01:30
我在這臺機器上有16GB的內存,但是至少有一半的內存正在被任何窗口膨脹加上SQL緩存使用。我無法將10GB存儲到內存中,所以我用完了。我很驚訝IQueryable檢索整個表...我期望它一次獲取一行或少量行。 – Gleno 2010-09-12 18:54:19
我似乎已經能夠通過將編譯目標更改爲x64而不是x86,這使得我的機器上使用更多的內存。然而,我在我的foreach循環中迭代的數據並不是很大,所以我認爲循環內部的東西沒有正確地收集垃圾。 – 2012-08-15 16:55:16