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

贊助商

分類目錄

贊助商

最新文章

搜索

通過(guò)實(shí)驗(yàn)比較C# for與foreach循環(huán)速度的快慢

作者:admin    時(shí)間:2023-6-7 13:53:1    瀏覽:

我做了一個(gè)小實(shí)驗(yàn)來(lái)證明 for 循環(huán) 與 foreach 循環(huán)速度快慢的觀點(diǎn)。

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

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

為什么會(huì)這樣?讓我們更深入一點(diǎn)。

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

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

等等?。?!

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

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

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

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

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

結(jié)論

foreach 循環(huán)速度更快,因?yàn)榇鎯?chǔ)數(shù)組中元素值的局部變量比訪問(wèn)數(shù)組中的元素更快。

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

相關(guān)文章

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