1

我用两种方法填充了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);
        }


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

还可以单击 fillButton 来调用此方法。性能结果愚蠢地改变。我认为这很疯狂。867 ms 第二次点击结果 56 ms 第三次点击 45 ms....

4

2 回答 2

1

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

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

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

于 2010-12-09T22:10:03.307 回答
0

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

listBilgisayar = ctx.table_bilgisayar.ToList();
于 2010-12-09T21:45:07.823 回答