【发布时间】:2010-12-24 00:41:35
【问题描述】:
在这里阅读了一个关于我们的计算机可以在一秒钟内做什么的问题后,我做了一个我想了一段时间的小测试,结果让我感到非常惊讶。看:
捕获空异常的简单程序,执行 1900 次迭代几乎需要一秒钟:
for(long c = 0; c < 200000000; c++)
{
try
{
test = null;
test.x = 1;
}
catch (Exception ex)
{
}
}
或者,在进行分配之前检查 test == null,同一个程序可以在一秒钟内进行大约 200000000 次迭代。
for(long c = 0; c < 1900; c++)
{
test = null;
f (!(test == null))
{
test.x = 1;
}
}
有人详细解释了为什么会有这种巨大的差异吗?
编辑:在发布模式下运行测试,在 Visual Studio 之外,我得到 35000-40000 次迭代与 400000000 次迭代(总是近似)
注意我正在使用糟糕的 PIV 3.06Ghz 运行它
【问题讨论】:
-
喜欢你的问题。打算试试看。
-
使用
if (test != null)会更清楚。 -
@Jon Skeet:不是也快一点吗? (一个 CPU 操作而不是两个)
-
@R。 Bemrose - 编译器很可能在这两种情况下生成相同的 IL
标签: c# performance exception-handling