为什么PLINQ比LINQ Query提供更差的性能?

时间:2015-04-01 06:30:47

标签: c# plinq

我想了解PLINQ。因此,我正在查询其中包含102915个产品的数据库。

但令人震惊的是,我发现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;

2 个答案:

答案 0 :(得分:3)

可能是因为LINQ版本将查询转换为SQL(可能会或可能不会在服务器上并行运行),而PLINQ版本需要从数据库中检索所有内容,然后运行过滤和排序。

答案 1 :(得分:0)

您在AsParallel之后进行过滤。所以你正在阅读旋转线程和过滤的所有行。

您可以使用sql配置文件进行确认。