哪一个更适合填充DataGridView lambda或linq?

时间:2010-12-09 21:40:27

标签: c# lambda linq-to-objects performancecounter stopwatch

我用两种方法填充了2个dataGridView:
1)Lambda表达式:

  
 protected void FillLamdaMethod()
        {
            Stopwatch sw = Stopwatch.StartNew();
            using (eCommerceContext ctx = new eCommerceContext())
            {

                List<table_bilgisayar> listBilgisayar = new List<table_bilgisayar>();
               listBilgisayar = ctx.table_bilgisayar.ToList();
                dataGridViewLamda.DataSource = listBilgisayar;//qry.AsEnumerable();
            }
            sw.Stop();
          lblLamdaResult.Text = String.Format("Time used (float): {0} ms",sw.Elapsed.TotalMilliseconds)+Environment.NewLine;
            lblLamdaResult.Text+=String.Format("Time used (rounded): {0} ms", sw.ElapsedMilliseconds);


        }


2)Linq方法:

 protected void FillClassicMethod()
        {
            Stopwatch sw = Stopwatch.StartNew();
            using (eCommerceContext ctx = new eCommerceContext())
            {
                List<table_bilgisayar> listBilgisayar = new List<table_bilgisayar>();
                listBilgisayar =(from q in ctx.table_bilgisayar select q).ToList();
                dataGridViewClasicLinq.DataSource = listBilgisayar;//(from q in ctx.table_bilgisayar select q.model).ToList();
            }
            sw.Stop();

            lblClassicResult.Text = String.Format("Time used (float): {0} ms", sw.Elapsed.TotalMilliseconds)+Environment.NewLine;
            lblClassicResult.Text += String.Format("Time used (rounded): {0} ms", sw.ElapsedMilliseconds);
        }


我有两个重要的问题 1)这种秒表方法是正确的还是足够的,还是有更好的方法来计算性能? 2)这次;我知道lambda表达式比经典的linq更快(来自表格中的x等...)但测试结果令人惊讶:
1)Lambda方法:867毫秒
2)Linq方法:39毫秒 这个结果是对的吗?我希望它必须恰恰相反......

也可以单击fillButton来调用此方法。表现结果愚蠢地改变。我觉得这很疯狂。 867 ms第二次点击结果56 ms第三次点击45 ms ....

2 个答案:

答案 0 :(得分:1)

我认为要获得任何可靠的结果,您必须稍微修改一下您的测试。

也许你可以启动秒表,循环1000次调用你的填充方法,停止秒表然后简单地将你的结果除以1000得到一个平均值。

由于多种原因(例如其他进程和/或线程占用CPU或运行.NET垃圾收集),结果可能会发生巨大变化。多次执行测试并取平均值将有助于消除任何差异。

答案 1 :(得分:0)

我很惊讶有任何区别,我认为这只是一种不同的语法。也许你的Select (q=>q)会减慢速度。尝试

listBilgisayar = ctx.table_bilgisayar.ToList();