【问题标题】:which one is better for filling DataGridView lambda or linq?哪一个更适合填充 DataGridView lambda 或 linq?
【发布时间】:2010-12-09 21:40:27
【问题描述】:

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

【问题讨论】:

  • 你是在一个接一个运行这些吗?您的结果是否受到 JIT 的影响?您的数据源是否第二次从缓存中提供结果?

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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    listBilgisayar = ctx.table_bilgisayar.ToList();
    

    【讨论】:

    • 什么是 eCommerceContext()?一个数据库连接?也许一些连接池正在发生,因为现在你说第二次和第三次更快
    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多