EF 6并行处理查询结果(1mil条记录)



我正在使用EF 6查询存储animals的数据库表。

var results = _ctx.Animals.ToList();

然后我几乎没有什么方法需要处理某些类型的动物。

public void ProcessDogs(List<Animal> data)
{
var dogs = data.Where(t=> t.Category == "dog").ToList();
// do some other work on the dogs
}
public void ProcessCats(List<Animal> data)
{
var cats = data.Where(t=> t.Category == "cat").ToList();
// do some other work on the cats
}
public void ProcessCamels(List<Animal> data)
{
var camels = data.Where(t=> t.Category == "camel").ToList();
// do some other work on the camels
}

如何以最佳方式并行处理从表中返回的所有记录?我不能使用async-await

简单。一个线程读取项目,然后将它们排队到一个队列中进行处理,多个线程将它们取出并进行处理。一个线程足以处理数据读取,根据网络的性质,数据读取很可能通过一根以太网电缆。

您可以使用Parallel.ForEach

var items = new [] {"cat", "dog", "camel"};
Parallel.ForEach(items, animal => {
var list = data.Where(t=> t.Category == animal).ToList();
// do rest
});

最新更新