[英]for and while loop in c#
for (i=0 ; i<=10; i++)
{
..
..
}
i=0;
while(i<=10)
{
..
..
i++;
}
在 for 和 while 循環中,哪個更好,性能明智?
(更新)實際上 - 在一種情況下for
構造更有效; 在數組上循環。 只要您在條件中使用arr.Length
,編譯器/JIT 就會針對這種情況進行優化:
for(int i = 0 ; i < arr.Length ; i++) {
Console.WriteLine(arr[i]); // skips bounds check
}
在這種非常特殊的情況下,它跳過邊界檢查,因為它已經知道它永遠不會越界。 有趣的是,如果您“提升” arr.Length
以嘗試手動優化它,您可以防止這種情況發生:
int len = arr.Length;
for(int i = 0 ; i < len ; i++) {
Console.WriteLine(arr[i]); // performs bounds check
}
然而,對於其他容器( List<T>
等),提升作為手動微優化是相當合理的。
(結束更新)
兩者都不; 無論如何,for 循環在引擎蓋下被評估為 while 循環。
例如 ECMA 334(明確分配)的 12.3.3.9 規定了 for 循環:
for ( for-initializer ; for-condition ; for-iterator ) embedded-statement
本質上是等價的(從明確賦值的角度來看(與說“編譯器必須生成這個 IL”不完全相同))為:
{
for-initializer ;
while ( for-condition ) {
embedded-statement ;
LLoop:
for-iterator ;
}
}
將針對 for 語句的 continue 語句轉換為針對標簽 LLoop 的 goto 語句。 如果 for 條件從 for 語句中省略,則確定賦值的評估繼續進行,就好像 for-condition 在上述擴展中被替換為 true。
現在,這並不意味着編譯器必須做完全相同的事情,但實際上它幾乎可以......
我會說它們是相同的,無論如何你都不應該做這樣的微優化。
性能將是相同的。 但是,除非您需要在循環外訪問i
變量,否則您應該使用for
循環。 這會更干凈,因為i
只會在塊內有范圍。
程序效率來自適當的算法、良好的對象設計、智能程序架構等。
使用 for 循環與 while 循環減少一兩個循環永遠不會使慢程序變快,或使快速程序變慢。
如果您想在本節中提高程序性能,請找到一種方法來部分展開循環(請參閱Duff 的設備),或者提高循環內部執行的性能。
沒有一個。 它們是等價的。 您可以將“for”循環視為編寫 while 循環的更緊湊的方式。
是的,它們是等效的代碼片段。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.