2010-12-09 46 views
1

我填充2的dataGridView二種方法的:
1)Lambda表達式:
哪一個更適合填充DataGridView lambda或linq?


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表達式是(在表...來自x),但是測試結果比經典LINQ快多了是令人驚訝:
1)LAMBDA方法:867毫秒
2)Linq的方法:39毫秒 這結果是正確的?我預計它必須恰好相反...

也請單擊fillButton來調用此方法。表現結果愚蠢地改變。我認爲這很瘋狂。 867毫秒秒點擊結果56毫秒第三點擊45毫秒....

+0

您是否正在運行這些?你的結果是否被JIT歪曲?您的數據源是否第二次從緩存中提供結果? – 2010-12-09 21:58:14

回答

0

我很驚訝有什麼區別,我認爲這只是一個不同的語法。也許你的Select (q=>q)放慢了速度。嘗試

listBilgisayar = ctx.table_bilgisayar.ToList(); 
+0

我改變了,但效果結果與之前一樣 – Penguen 2010-12-09 21:55:51

1

我想得到任何一種可靠的結果,你將不得不稍微修改你的測試。

也許你可以啓動秒錶,循環1000次調用你的填充方法,停止秒錶,然後簡單地將結果除以1000得到平均值。

由於多種原因(例如其他進程和/或線程吃掉CPU或運行.NET垃圾收集),結果可能會發生劇烈變化。多次執行測試並取平均值將有助於消除任何差異。