【发布时间】:2011-04-10 22:24:54
【问题描述】:
我正在使用 foreach / IQueryable 和 LINQ-to-SQL 遍历一个较小的 (~10GB) 表。 看起来像这样:
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 吗?
-
我在这台机器上有 16GB 的内存,但至少有一半的内存被 Windows bloat 和 SQL 缓存使用。我无法将 10GB 放入内存,所以我用完了它。我很惊讶 IQueryable 检索整个表...我希望它一次获取一个或少量行。
-
我似乎能够通过将编译目标更改为 x64 而不是 x86 来解决这个问题,这会占用我机器上的更多内存。但是,我在 foreach 循环中迭代的数据并不大,所以我认为循环内的内容没有正确收集垃圾。
标签: c# linq linq-to-sql