我正在处理一个非常大的数据集,大约有200万条记录。我有以下代码,但是在处理了大约三个批次(约60万条记录)后,会出现内存不足异常。我理解每当它遍历每个批次实体框架时,都会懒加载,然后试图将完整的200万条记录构建到内存中。有没有办法在处理完一个批次后卸载它呢?
ModelContext dbContext = new ModelContext();
IEnumerable<IEnumerable<Town>> towns = dbContext.Towns.OrderBy(t => t.TownID).Batch(200000);
foreach (var batch in towns)
{
SearchClient.Instance.IndexMany(batch, SearchClient.Instance.Settings.DefaultIndex, "Town", new SimpleBulkParameters() { Refresh = false });
}
注意:批处理方法来自于此项目:https://code.google.com/p/morelinq/ 搜索客户端是:https://github.com/Mpdreamz/NEST。
Skip(batchNo*batchSize).Take(batchSize)
有何不同? - B2K