我用两种方法填充了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 ....
答案 0 :(得分:1)
我认为要获得任何可靠的结果,您必须稍微修改一下您的测试。
也许你可以启动秒表,循环1000次调用你的填充方法,停止秒表然后简单地将你的结果除以1000得到一个平均值。
由于多种原因(例如其他进程和/或线程占用CPU或运行.NET垃圾收集),结果可能会发生巨大变化。多次执行测试并取平均值将有助于消除任何差异。
答案 1 :(得分:0)
我很惊讶有任何区别,我认为这只是一种不同的语法。也许你的Select (q=>q)
会减慢速度。尝试
listBilgisayar = ctx.table_bilgisayar.ToList();