2015-04-01 82 views
0

我想了解PLINQ。因此,我正在查詢其中包含102915個產品的數據庫。爲什麼PLINQ會給LINQ查詢帶來更糟糕的性能?

但令人震驚的是,我看到PLINQ需要18秒,普通查詢只需要4秒。要了解,我已閱讀這篇文章,PLINQ Performs Worse Than Usual LINQ。 但是,我仍然不明白爲什麼這花了這麼多秒。

要刪除頭頂,我刪除了PLINQ中的.order(m.sku),但它仍然給出相同的結果。這裏是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

收藏中有多少物品?他們看起來怎麼樣? – 2015-04-01 06:36:50

+0

http://www.albahari.com/threading/part5.aspx - 此鏈接閱讀使用PLINQ的指南。 – sribin 2015-04-01 11:50:00

回答

3

大概是因爲LINQ版本轉換而PLINQ版本的查詢SQL(這可能會或可能不會在parallell在服務器上運行)需要從數據庫中檢索所有內容,然後運行過濾和自我排序。

0

您正在過濾您的AsParallel。所以你正在閱讀所有的行紡紗線和過濾。

你可以用sql配置文件來確認。

相關問題