基本详情
我有一个linq语句,它从数据库中获取一些记录并将它们放在System.Linq.Enumerable中:
var someRecords = someRepoAttachedToDatabase.Where(p=>true);
假设这抓取了吨(25k +)的记录,我需要对所有记录执行更新操作。为了加快速度,我必须决定使用分页并同时执行100块而不是所有记录所需的操作。
问题中的代码用于两个地方:一种更新数据库中大量值的服务方法,以及一种获取旧值和更新值的集成测试,以确保更新正确执行。
问题
有问题的行是我计算子集中记录数量的行,看看我们是否在最后一页;如果子集中的记录数小于分页的大小 - 那么这意味着没有剩余的记录。我想知道的是最快的方法是什么?
问题中的代码
int pageSize = 100;
bool moreData = true;
int currentPage = 1;
while (moreData)
{
var subsetOfRecords = someRecords.Skip((currentPage - 1) * pageSize).Take(pageSize); //this is also a System.Linq.Enumerable
if (subsetOfRecords.Count() < pageSize){ moreData = false;} //line in question
//do stuff to records in subset
currentPage++;
}
我考虑过的事情
我确信我错过了很多其他想法。
答案 0 :(得分:2)
使用parallels库。它会自动处理你的paralellezation和分页。处理记录的顺序是否重要?
var someRecords = someRepoAttachedToDatabase.Where(p=>true);
Parallel.Foreach(someRecords, record=>DoSomethingWithRecord(record));