人们常说,由于性能不佳,您不应该将异常用于常规错误处理。我的猜测是,糟糕的性能是由于必须实例化一个新的异常对象、生成堆栈跟踪等造成的。那么为什么不使用轻量级异常呢?像这样的代码在逻辑上是合理的:
string ageDescription = "Five years old";
try {
int age = int.Parse(ageDescription);
}
catch (Exception) {
// Couldn't parse age; handle parse failure
}
然而,我们建议使用它TryParse
来避免异常的开销。但是如果异常只是一个在线程启动时被初始化的静态对象,那么抛出异常的所有代码需要做的就是设置一个错误代码号,也许还有一个错误字符串。没有堆栈跟踪,没有新的对象实例化。这将是一个“轻量级异常”,因此使用异常的开销将大大减少。为什么我们没有这么轻量级的异常?