gpt4 book ai didi

c# - 尝试捕捉性能

转载 作者:IT王子 更新时间:2023-10-29 04:24:05 27 4
gpt4 key购买 nike

This MSDN 上的文章指出,只要没有抛出实际异常,您就可以使用任意数量的 try catch block ,并且不会产生任何性能成本。
因为我一直相信 try-catch 即使不抛出异常也会对性能造成很小的影响,所以我做了一个小测试。

 private void TryCatchPerformance()
{
int iterations = 100000000;

Stopwatch stopwatch = Stopwatch.StartNew();
int c = 0;
for (int i = 0; i < iterations; i++)
{
try
{
// c += i * (2 * (int)Math.Floor((double)i));
c += i * 2;
}
catch (Exception ex)
{
throw;
}
}
stopwatch.Stop();
WriteLog(String.Format("With try catch: {0}", stopwatch.ElapsedMilliseconds));

Stopwatch stopwatch2 = Stopwatch.StartNew();
int c2 = 0;
for (int i = 0; i < iterations; i++)
{
// c2 += i * (2 * (int)Math.Floor((double)i));
c2 += i * 2;
}
stopwatch2.Stop();
WriteLog(String.Format("Without try catch: {0}", stopwatch2.ElapsedMilliseconds));
}

我得到的输出:

With try catch: 68
Without try catch: 34

所以看起来不使用 try-catch block 似乎毕竟更快?

我发现更奇怪的是,当我用更复杂的东西替换 for 循环主体中的计算时: c += i * (2 * (int)Math.Floor((double)i) );
差异远没有那么显着。

With try catch: 640
Without try catch: 655

我是不是做错了什么,或者对此有合理的解释吗?

最佳答案

JIT 不会对“protected”/“try” block 执行优化,我猜根据您在 try/catch block 中编写的代码,这会影响您的性能。

关于c# - 尝试捕捉性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1350264/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com