我有以下 C# 代码试图在发布模式下进行基准测试:
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 块,它在 64 位的 VS 2015 中也能在0.6 秒内运行。
当有一个 try catch 块时,这看起来像是一个严重的 RyuJIT 回归。我对么 ?