【问题标题】:Using Exceptions throwing in C#. Does it affect a performance?在 C# 中使用抛出异常。会影响表演吗?
【发布时间】:2009-07-02 23:12:19
【问题描述】:

基本上,问题是: C# 中的异常对性能影响很大吗?避免异常重新抛出是否更好?如果我在代码中生成异常,会影响性能吗?

对于问题本身的愚蠢感到抱歉

【问题讨论】:

    标签: c# exception-handling


    【解决方案1】:

    如果您担心异常性能,则说明您使用错误。

    但是是的,异常确实会影响性能。

    【讨论】:

    • 我不担心。我认为你应该重新考虑你在说什么。
    • @opetrov:他是对的。当出现问题时,您应该抛出异常,而不是控制程序的流程。对于任何性能密集型操作,您应该检查您的输入,并确保根本不会抛出异常。例外应该是例外。
    • @opetrov,@Guard 总结了我试图做得很好的观点。
    【解决方案2】:

    在 C# 中引发异常是一项代价高昂的操作(与 C# 中的其他操作相比),但还不足以让我避免这样做。

    我同意 Jared 的观点,如果您的应用程序由于引发和抛出异常而明显变慢,我会看看您的整体策略。可以重构某些东西以使异常处理更有效,而不是摒弃在代码中引发异常的概念。

    【讨论】:

      【解决方案3】:

      Microsoft 的类库开发设计指南是非常有价值的资源。这是一篇相关文章:

      Exceptions and Performance

      我还推荐微软出版社的Framework Design Guidelines 书。它有很多来自设计指南链接的信息,但它是由 MS 人员和 Anders Hejlsberg 本人注释的。它让我们深入了解事物的“为什么”和“如何”。

      【讨论】:

        【解决方案4】:

        通过 try/catch 语句运行代码根本不会影响性能。如果抛出异常,唯一的性能损失是......因为运行时必须展开堆栈并收集其他信息才能填充异常对象。

        【讨论】:

          【解决方案5】:

          大多数人所说的,加上: 不要将异常用作编程流程的一部分。换句话说,不要为account.withdrawalAmount > account.balance 之类的东西抛出异常。那是一个商业案例。

          另一个需要注意的性能问题是吞咽异常。这是一个滑坡,一旦你开始允许你的应用程序吞下异常,你就开始在任何地方都这样做。现在,您可能会允许您的应用抛出您不知道的异常,因为您正在吞噬它们,您的性能会受到影响并且您不知道为什么。

          【讨论】:

          • account.withDrawalAmount > machine.CashOnHand IMO.
          • @Chris,不,这仍然不是一个例外情况......它实际上是一个预期的情况。很有可能,如果没有技术故障,机器可能会没钱。因此,这是一个商业案例。
          • 我同意乔尔的观点。意外可能是连接丢失或类似情况。但 ATM 的部分性质是它持有的资金有限,可能会用完。
          • IMO 我仍然会将其作为例外情况处理,因为它主要不会发生,我宁愿处理“OutOfMoneyException”关闭机器/完全锁定对机器的访问等而不是将其作为正常分支逻辑流程的一部分。最重要的是,我通常会发生某种类型的全局异常策略,该异常会触发某种类型的机器需要维护等警报。
          • 我会说这是一个相当安全的假设,任何时候发生的事件都无法通过用户的操作来协调,并且需要某种类型的管理员或超级级别访问权限来修复应该是一个例外而不是业务案例.机器锁定与帐户锁定在极端情况下非常不同,我不希望两者的逻辑直接相互平行。
          【解决方案6】:

          这并不傻,只是我在 SO 上的其他地方也看到过。

          当事情真的很异常时,异常就会很好地发生。大多数情况下,当您没有太多机会从中恢复时,您会重新抛出异常(可能在记录之后)。所以它不应该打扰你正常的程序执行过程。

          【讨论】:

            【解决方案7】:

            Exceptions 顾名思义就是例外。因此,您不能期望它们成为优化的重要目标。更多情况下,他们表现不佳,因为他们有其他优先事项,例如收集有关问题的详细信息。

            【讨论】:

              【解决方案8】:

              .NET 中的异常确实会影响性能。这就是为什么它们应该只在例外情况下使用的原因。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2020-05-22
                • 2020-06-08
                • 2018-03-25
                • 1970-01-01
                • 2016-07-04
                • 2011-11-02
                • 1970-01-01
                • 2021-09-25
                相关资源
                最近更新 更多