2015-04-01 2 views
0

Я пытаюсь понять PLINQ. Поэтому для этого я запрашиваю базу данных, в которой есть 102915 продуктов.Почему PLINQ дает худшую производительность после запроса LINQ?

Но, к сожалению, я вижу, что PLINQ занимает 18 секунд, когда обычный запрос занимает всего 4 секунды. Чтобы понять, я прочитал эту статью, PLINQ Performs Worse Than Usual LINQ. Но все же я не мог понять, почему это заняло так много секунд.

Чтобы удалить из головы, я удалил .order(m.sku) в PLINQ, но при этом он дает тот же результат. Здесь приведен код для LINQ и PLINQ.

PLINQ Версия

   shootersEntities model = new shootersEntities(); 
       var IsOnline = cBOnline.Checked; 
       var IsDeleted = cBDeleted.Checked; 

       Stopwatch s = new Stopwatch(); 
       s.Start(); 
       var p = from m in model.products.AsParallel() 
         where ((m.productOnline == IsOnline) || (m.deleted == IsDeleted)) 

         select new { m.sku, m.productCode, m.quantity }; 

       var list = p.ToList(); 
       s.Stop(); 
       MessageBox.Show((s.ElapsedMilliseconds/1000).ToString()); 

       dataGridView1.DataSource = list; 

LINQ Версия

    shootersEntities model = new shootersEntities(); 
        var IsOnline = cBOnline.Checked; 
        var IsDeleted = cBDeleted.Checked; 

        Stopwatch s = new Stopwatch(); 
        s.Start(); 


       var p = from m in model.products 
         where ((m.productOnline == IsOnline) || (m.deleted == IsDeleted)) 
         select new { m.sku, m.productCode, m.quantity }; 

       var list = p.ToList(); 
       s.Stop(); 
       MessageBox.Show((s.ElapsedMilliseconds/1000).ToString()); 

       dataGridView1.DataSource = list; 
+0

Сколько предметов в коллекции? На что они похожи? –

+0

http://www.albahari.com/threading/part5.aspx - эту ссылку вы прочитали руководства по использованию PLINQ. – sribin

ответ

3

Вероятно потому, что версия LINQ переводит запрос на SQL (который может или не может быть запущена в parallell на сервере) в то время как версия PLINQ необходимо извлечь все из базы данных, а затем запустить фильтрацию и сортировку.

0

Вы фильтруете свой AsParallel. Итак, вы читаете все строки, вращающие потоки и фильтрацию.

Вы можете подтвердить это с помощью профиля sql.

Смежные вопросы