我有下面的C#代碼在釋放模式試圖基準:在64位下執行速度很慢。可能的RyuJIT錯誤?
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication54
{
class Program
{
static void Main(string[] args)
{
int counter = 0;
var sw = new Stopwatch();
unchecked
{
int sum = 0;
while (true)
{
try
{
if (counter > 20)
throw new Exception("exception");
}
catch
{
}
sw.Restart();
for (int i = 0; i < int.MaxValue; i++)
{
sum += i;
}
counter++;
Console.WriteLine(sw.Elapsed);
}
}
}
}
}
我是一個64位的機器上,並且VS 2015年安裝。當我在32位下運行代碼時,它運行在0.6秒左右的每次迭代,並打印到控制檯。當我在64位下運行它時,每次迭代的持續時間只需跳到4秒!我在我的同事電腦上只安裝了VS 2013的示例代碼。有32位和64位版本運行在0.6秒。除此之外,如果我們只是刪除try catch塊,它也會在的0.6秒內運行,其中的VS 2015以64位的形式運行,時間爲。
這看起來像是一個嚴重的RyuJIT迴歸,當有一個try catch塊時。我對麼 ?
你的電腦是超級天才!對我來說,每次迭代需要大約10秒:(這裏沒有什麼區別,32位和64位都給出了相同的結果) –
@ M.kazem。我認爲這是不可能的。我的電腦是Surface Pro 3 i7,帶有U你可以確定你在release模式下運行它,並且在不調試的情況下啓動嗎?順便說一下,我嘗試了4種不同的計算機。 –
Oh。no no。I Got it。因爲你啓用了選項'優化代碼'在解決方案的屬性,現在我得到'1.3s'爲32bit和'3.9s'爲64位 –