技術(shù)頻道導(dǎo)航
HTML/CSS
.NET技術(shù)
IIS技術(shù)
PHP技術(shù)
Js/JQuery
Photoshop
Fireworks
服務(wù)器技術(shù)
操作系統(tǒng)
網(wǎng)站運營

贊助商

分類目錄

贊助商

最新文章

搜索

通過實驗比較C# for與foreach循環(huán)速度的快慢

作者:admin    時間:2023-6-7 13:53:1    瀏覽:

我做了一個小實驗來證明 for 循環(huán) 與 foreach 循環(huán)速度快慢的觀點。

我在 SQL Server 數(shù)據(jù)庫中有一個名為 accounts 的表,我在該表中添加了 20,000 行,其中包含 9 列,每條記錄大約有 1 KB 的數(shù)據(jù)。加載到我的業(yè)務(wù)層后,我將其轉(zhuǎn)換回 DTO 并返回到我的 Web 服務(wù)。只是為了測試性能,我添加了兩個性能計數(shù)器——一個用于foreach循環(huán),一個用于for循環(huán)。結(jié)果很明顯。foreach 循環(huán)執(zhí)行相同的過程需要 107 毫秒,而經(jīng)典的 for 循環(huán)需要 14 毫秒。

 C# 代碼性能 - for 循環(huán) VS foreach 循環(huán)

為什么會這樣?讓我們更深入一點。

for 循環(huán)版本只為兩個局部變量(counteri)使用了足夠的堆??臻g。而 foreach 版本為四個局部變量(item、AccountList 對象和兩個編譯器生成的臨時對象)使用堆??臻g。

當(dāng)在 CLR 中調(diào)用方法時,局部變量所需的所有內(nèi)存都分配在堆棧上。由于這是在堆棧上進(jìn)行的,因此這個過程很快但不是免費的。這就是 foreach 循環(huán)由于其額外的兩個局部變量而產(chǎn)生少量成本的原因。

等等?。?!

還有其他改變效果的東西。

如果我們在for循環(huán)和foreach循環(huán)中多次使用局部變量,看看會發(fā)生什么。

 for和foreach循環(huán)中多次使用局部變量

結(jié)果逆轉(zhuǎn)了。

可見,如果我們必須在 for 循環(huán)中多次訪問局部變量值,在這種情況下,性能會下降。

結(jié)論

foreach 循環(huán)速度更快,因為存儲數(shù)組中元素值的局部變量比訪問數(shù)組中的元素更快。

如果每次迭代只能訪問一次數(shù)組,則 forforeach 循環(huán)更快。

相關(guān)文章

標(biāo)簽: CSharp  c-sharp循環(huán)  for  foreach  
x
  • 站長推薦
/* 左側(cè)顯示文章內(nèi)容目錄 */