繁体   English   中英

为什么PLINQ的性能比LINQ查询差?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM