我只是試圖確定每個「if」語句對我的C#應用程序的性能的影響,當它在具有大量迭代的循環中使用時。我還沒有找到關於這個話題,所以我創建了這個話題。如果語句性能在c#
對於測試我做了2個循環:一個沒有「if」,另一個只有一個「if」語句。代碼如下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
namespace IfPerformance
{
class Program
{
static void Main(string[] args)
{
int N = 500000000;
Stopwatch sw = new Stopwatch();
double a = 0, b = 0;
bool f;
sw.Restart();
for (int i = 0; i < N; i++)
{
a += 1.1;
f = a < N;
}
sw.Stop();
Console.WriteLine("Without if: " + sw.ElapsedMilliseconds + " ms");
a = 0;
sw.Restart();
for (int i = 0; i < N; i++)
{
if (a < N)
a += 1.1;
else
b += 1.1;
}
sw.Stop();
Console.WriteLine("With if: " + sw.ElapsedMilliseconds + " ms");
Console.ReadKey();
}
}
}
我用「優化代碼」構建選項和「無需調試就開始」運行測試。結果如下: 沒有如果:154毫秒 與if:742毫秒
這意味着單個「if」語句帶來差不多5倍的性能下降。我認爲這會有所幫助。
此外,我已經注意到,在一個大循環中存在幾個額外的「if」可能會使我的最終應用程序減慢25%,這對我來說意義重大。
具體而言,我對一組數據執行蒙特卡羅優化,這需要整個數據集中的很多循環。循環包含取決於用戶設置的分支。從這一點「如果」出現。
我的問題在性能方面的專業人士:
- 什麼是額外的運行多次迭代的時間循環的影響,「如果」 S?
- 如何避免放緩?
如果我走錯了方向,請發表您的意見。
您正在確定每隔500000000條if語句的影響。 –
這些代碼示例是兩個不同的代碼,一個是布爾賦值,另一個是條件語句,因此這不是評估性能的合適方法。 – saeed
不要掛上這樣的微觀優化。無論如何,編譯器可能會優化大量的代碼。您無法在調試模式下可靠地進行性能測試。使用用戶期望後,在整個程序中使用外部工具完成最佳性能測試 – Sico