[測試分析] for與foreach 執行效率測試結果 (轉)

gugu99發表於2007-08-16
[測試分析] for與foreach 執行效率測試結果 (轉)[@more@]

 在很多情況下for和foreach具有同樣的功能,選擇for還是foreach很多人可能都是看自己的喜好,本測試試圖透過來真是測試資料來比較他們的。希望能給大家對他們的時候帶來一些幫助。

測試環境: 
  環境:  PIII800 + 456
  環境:  VisualStudio  +

測試用例:
  利用結果集來存放記錄,初始化對結果集新增記錄
  分別對記錄數為10000,100000,1000000條記錄的時候進行取樣分析

  關鍵測試對比程式碼如下,功能完全一樣:
  //foreach開始時間
  datetime3 = System.DateTime.Now.TimeOfDay.ToString();
  foreach(DataRow row in relationData.Tables[RelationData.RELATIONINFO_TABLE].Rows)
 buffer = row[RelationData.PK_TABLE_NAME].ToString();
  datetime4 = System.DateTime.Now.TimeOfDay.ToString();

  //for開始時間
  datetime5 = System.DateTime.Now.TimeOfDay.ToString();
  for(int j=0;j<1000000;j++)
  buffer = relationData.Tables[RelationData.RELATIONINFO_TABLE].Rows[j][RelationData.PK_TABLE_NAME].ToString();
  datetime6 = System.DateTime.Now.TimeOfDay.ToString();
 
測試結果:
  10000條記錄時:
  foreach讀取時間:16:29:34.2577584
  foreach結束時間:16:29:34.2677728
  for讀取開始時間:16:29:34.2677728
  for讀取結束時間:16:29:34.2878016
  100000條記錄時:
  foreach讀取時間:16:31:10.1055808
  foreach結束時間:16:31:10.1957104
  for讀取開始時間:16:31:10.1957104
  for讀取結束時間:16:31:10.4460704
  1000000條記錄時:
  foreach讀取時間:16:33:12.6217504
  foreach結束時間:16:33:13.6332048
  for讀取開始時間:16:33:13.6332048
  for讀取結束時間:16:33:18.7906208

結果分析:
  1)對於10000條記錄可以看出
  foreach用了 0.0100144 
  for迴圈用了0.0300432
  foreach所花的時間正好是for迴圈的 1/3
  2)對於100000條記錄可以看出
  foreach用了0.0901296 
  for迴圈用了0.2503600
  foreach所花的時間是for迴圈的 36%
  3)對於1000000條記錄結果可以看出
  foreach用了1.0114544 
  for迴圈用了4.1574160
  foreach所花的時間是for迴圈的 25%

  透過對這些測試結果的分析,可以看出相對於原來的for語句foreach具有
更好的執行效率,foreach的平均花費時間只有for30%。透過測試結果在for和foreach都可以使用的情況下,我們推薦使用效率更高的foreach.在測試同時
我們附加的發現,用for寫入資料時間大約是讀取資料時間的10倍左右.:P 
 

 


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-960730/,如需轉載,請註明出處,否則將追究法律責任。

相關文章