EF 6并行处理查询结果(100万条记录)

时间:2018-08-07 05:47:25

标签: c# performance entity-framework parallel-processing parallel.foreach

我正在使用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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

您可以使用Parallel.ForEach

var items = new [] {"cat", "dog", "camel"};

Parallel.ForEach(items, animal => {
   var list = data.Where(t=> t.Category == animal).ToList();
   // do rest
});
相关问题