Gle*_*eno 14 c# linq linq-to-sql
我正在使用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. :)
}
}
Run Code Online (Sandbox Code Playgroud)
Visual Studio调试器在foreach循环的基础上短暂地抛出一个内存不足的异常.我假设dtable的行没有被刷新.该怎么办?
Amy*_*y B 18
IQueryable<DailyResult>
在枚举循环的任何迭代之前,dtable将尝试将整个查询结果加载到内存中.它在foreach循环的迭代期间不加载一行.如果您需要该行为,请使用DataReader.
你打电话~10GB小?你有一种很好的幽默感!
您可以考虑以块(也称为分页)加载行.
conn.DailyResults.Where(dr => dr.DailyTransactionTypeID == 1).Skip(x).Take(y);
Run Code Online (Sandbox Code Playgroud)