我們在一個小測試應用程序中有非常有趣的效果,這是我們無法解釋的。c#的性能和可能的優化
我們的代碼塊:
while (true)
{
for (int i = 0; i < 1920; i++)
{
for (int j = 0; j < 1080; j++)
{
//l += rand.Next(j);
l += matcher.Next(j);
}
}
k++;
Console.WriteLine("{0}: Iteration {1}, l: {2}", DateTime.Now.ToString("hh:mm:ss"), k, l);
l = 0;
handle.WaitOne(100);
}
和類匹配器確實在其Next(j)
電話只有一個東西。它返回其內部創建的Random對象的方法(所以,我們正在添加一個簡單的函數調用)。
這裏的匹配器類定義:
class Matcher
{
private Random rand = new Random();
internal int Next(int j)
{
return rand.Next(j);
}
}
當我們執行該代碼一個迭代運行在Intel的Core 2 Quad約6秒。 但是,如果我們對行l += matcher.Next(j);
發表評論,並將取消註釋行l += rand.Next(j);
,則單次迭代開始花費大約第二次。
有沒有人有任何想法,爲什麼會發生?
注意:這只是一個非常簡單的測試。該函數中的實際邏輯將更復雜 –
使用'StopWatch'。 –
您是否啓用優化(發佈配置)來運行測試? –