基本上,问题是:
C#中的异常是否会严重影响性能?避免异常重新抛出是否更好?如果我的代码中生成异常,这是否会影响性能?
对于问题本身的愚蠢,我感到抱歉。
对于问题本身的愚蠢,我感到抱歉。
如果您担心异常的性能问题,那么您可能没有正确使用它们。
但是,确实,异常会影响性能。
在C#中,抛出异常是一项昂贵的操作(与C#中的其他操作相比),但不足以使我避免这样做。
我同意Jared的观点,如果由于抛出异常导致应用程序明显变慢,那么我会检查整体策略。可能可以重构某些内容,使异常处理更加高效,而不是摒弃在代码中引发异常的概念。
在try/catch语句中运行代码不会影响性能。唯一的性能损失是当抛出异常时...因为此时运行时必须解开堆栈并收集其他信息,以便填充异常对象。
Microsoft开发类库的设计指南是非常有价值的资源。以下是相关文章:
我还建议阅读 Microsoft Press 出版的 Framework Design Guidelines 书籍。它包含了来自设计指南链接中的大量信息,并由微软公司和 Anders Hejlsberg本人进行注释。它提供了关于事物背后的“为什么”和“如何”的许多见解。
account.withdrawalAmount > account.balance
这样的事情抛出异常。那是一个业务案例。这并不傻,我在其他地方也看到过,比如在SO上。
异常通常发生在真正异常的情况下。大多数情况下,当没有太多恢复机会时,您会重新抛出异常(可能是在记录日志后)。因此,在程序正常执行的过程中,它不应该影响您。
异常(Exceptions)顾名思义是意外情况。因此,您不能指望它们成为优化的重点。往往情况下,它们的性能表现不佳,因为它们有其他优先事项,例如收集有关出错原因的详细信息。
.NET 中的异常确实会影响性能。这就是为什么它们应该只在特殊情况下使用的原因。