0

基本细节

我有一个 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++;
}

我考虑过的事情

  1. subsetOfRecords.Count() < pageSize
  2. subsetOfRecords.ElementAt(pageSize - 1) == null (导致越界异常 - 可以捕获异常并将 moreData 设置为 false )
  3. 将 subsetOfRecords 转换为数组(由于 subsetOfRecords 的声明方式,将 someRecords 转换为数组将不起作用 - 但我愿意更改它)

我敢肯定还有很多其他的想法我错过了。

4

1 回答 1

2

使用并行库。它将自动为您处理并行化和分页。处理记录的顺序重要吗?

var someRecords = someRepoAttachedToDatabase.Where(p=>true); 
Parallel.Foreach(someRecords, record=>DoSomethingWithRecord(record));
于 2012-09-07T15:41:54.203 回答