gpt4 book ai didi

c# - 为什么 C# 没有轻量级异常?

转载 作者:太空狗 更新时间:2023-10-29 22:09:29 25 4
gpt4 key购买 nike

often said由于 bad performance,您不应该使用异常处理常规错误.我的猜测是,糟糕的性能是由于必须实例化一个新的异常对象、生成堆栈跟踪等造成的。那么为什么不使用轻量级异常呢?像这样的代码在逻辑上是合理的:

string ageDescription = "Five years old";
try {
int age = int.Parse(ageDescription);
}
catch (Exception) {
// Couldn't parse age; handle parse failure
}

但我们建议改用 TryParse 以避免异常的开销。但是,如果异常只是一个在线程启动时被初始化的静态对象,那么抛出异常的所有代码都需要设置一个错误代码编号,也许还有一个错误字符串。没有堆栈跟踪,没有新的对象实例化。这将是一个“轻量级异常”,因此使用异常的开销将大大减少。为什么我们没有这么轻量级的异常?

最佳答案

异常对象实例化是整个案例中最小的问题。真正的性能 killer 是控制流必须停止执行您的程序并且必须查找调用堆栈以查找可以捕获抛出的异常的可能处理程序(catch block ),然后它必须执行正确的处理程序(及其 finally block ) ,在被告知时重新抛出异常,然后在正确的位置继续执行程序,即在最后一个处理程序之后。 “轻量级”异常的想法不会改变这一切,它甚至会减慢线程的创建速度,因为它必须创建和存储异常对象,并且会阻止按类型过滤异常,这现在是可能的。

通过使用 TryParse,您可以通过一个简单的条件子句避免所有这些,而且您实际上编写的代码更少,并且更容易阅读和推理。

异常是针对特殊情况的,在这种情况下,它们为日志/调试器提供了很多有用的信息。

关于c# - 为什么 C# 没有轻量级异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13781086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com