[英]Why PLINQ is giving worse performance then LINQ Query?
我試圖了解PLINQ。 因此,我正在查詢其中包含102915產品的數據庫。
但是令人震驚的是,我看到PLINQ需要18秒,而普通查詢只需要4秒。 要理解,我已經閱讀了這篇文章, PLINQ比通常的LINQ表現更差 。 但是,我仍然不明白為什么要花這么多時間。
為了消除.order(m.sku)
,我刪除了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;
可能是因為LINQ版本將查詢轉換為SQL(可以在服務器上並行運行,也可以不在服務器上並行運行),而PLINQ版本需要從數據庫中檢索所有內容,然后自行進行過濾和排序。
您正在過濾AsParallel。 因此,您正在讀取旋轉線程和過濾的所有行。
您可以使用sql配置文件對此進行確認。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.