只是为了解决这个问题(是的,这个问题是 8 个月前提出的,但互联网总是知道的!),我决定运行一个小测试,如果 如果 em> 你很确定你不会有例外——例如,“其他”部分只会发生 0.001% 的时间。事实证明,如果你从不必须捕获/其他任何东西,try-catch 的速度大约快 4%(无论如何,在我的机器上)。这是代码和随附的结果:
案例 1:if-else:
var startTime = DateTime.Now;
int bazillion = 100000000;
int[] list = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
for (int i = 0; i < bazillion; i++)
{
for (int k = 0; k < list.Length; k++)
{
if (k >= 0)
{
list[k] = i;
}
else
{
// do nothing.
}
}
}
var executionTime = DateTime.Now - startTime;
Debug.WriteLine (executionTime.TotalMilliseconds);
5 次运行的执行时间(毫秒):7441.4256、7392.4228、7545.4316、7531.4308、7323.4188。
平均 = 7446.82592 毫秒
案例 2:try-catch:
var startTime = DateTime.Now;
int bazillion = 100000000;
int[] list = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
for (int i = 0; i < bazillion; i++)
{
for (int k = 0; k < list.Length; k++)
{
try
{
list[k] = i;
}
catch (Exception e)
{
// do nothing
}
}
}
var executionTime = DateTime.Now - startTime;
Debug.WriteLine(executionTime.TotalMilliseconds);
5 次运行的执行时间(毫秒):7258.4152、7137.4083、7070.4044、7052.4033、7120.4073
平均 = 7127.8077 毫秒
结论 (基于这个相当简单的例子;实际里程可能会有所不同,等等):
就绝对数字而言,if 您非常确定不会发生异常/其他情况,try-catch 比每次都必须执行“if”子句快 4% .