【发布时间】:2011-03-01 18:23:23
【问题描述】:
这里有一个简单的问题:
您如何看待每条指令都使用 try catch 的代码?
void myfunction() {
try {
instruction1();
}
catch (ExceptionType1 e) {
// some code
}
try {
instruction2();
}
catch (ExceptionType2 e) {
// some code
}
try {
instruction3();
}
catch (ExceptionType3 e) {
// some code
}
try {
instruction4();
}
catch (ExceptionType4 e) {
// some code
}
// etc
}
我知道这很糟糕,但我想知道这是否会降低性能。
【问题讨论】:
-
如果您想知道这是否会降低性能,请测量它!有太多因素无法给出明确的答案(您的 JVM、硬件平台、
instructionX调用的耗时程度、是否真的抛出异常)。 -
性能下降很小,但您可能会付出沉重的代价,因为您引入了多个执行路径。如果异常 1 被抛出并且你处理它,那么异常 2 可能会被抛出。它实际上取决于您的业务逻辑(如果抛出任何异常,执行是否应该中断)。但性能不是您的代码的问题。
-
您的代码示例具有误导性......您所说的“指令”被写成好像它总是一个方法调用。您的意思是 “您如何看待在每个方法调用周围使用 try/catch 的代码?” 因为对于像 int a = 这样的包装指令,我肯定还有更多话要说42; 在 try/catch ;)
-
这不会导致性能明显下降