【发布时间】:2014-04-09 16:44:54
【问题描述】:
我正在阅读有关如何强制操作引发溢出异常的信息,在“自己尝试”部分,我将它放在与书不同的地方。我很好奇是否存在与某个位置相关的性能问题,因为我不确定 checked 关键字的基本机制。
书中的例子是做一个阶乘,它会很快抛出一个溢出,即使是一个无符号长整数。这是我想出的代码:
static long Factorial (long number) {
long result = 1;
for (int i = 2; i <= number; i++) {
checked {
result *= i;
}
}
return result;
}
但是,查看书后的答案页,他们将checked 包裹在整个函数体中,包括return 和long result = 1;。显然,在那些地方你永远不需要一个,所以如果有的话,我会把for 循环包装在check 中。
循环中是否存在它会导致重复生成一些底层 CLR 代码? (比如为什么要在进入 for 循环之前声明一个变量。)或者在循环中没有开销?
【问题讨论】:
标签: c# performance math overflowexception