代码之家  ›  专栏  ›  技术社区  ›  GenEric35

try/catch块的性能开销[duplicate]

  •  8
  • GenEric35  · 技术社区  · 14 年前

    可能重复:
    Performance Cost Of ‘try’

    尽可能多地使用try-catch块不是最好的吗?

    7 回复  |  直到 7 年前
        1
  •  32
  •   Community THelper    7 年前

    MSDN site :

    寻找和设计 异常严重的代码会导致 这与try/catch无关 积木:你只有在 实际的异常被抛出。你呢 可以使用尽可能多的try/catch块 你想要的。使用异常 无缘无故是你输的地方 性能。例如,你应该 远离像使用 控制流例外。

    另请参见以下相关问题: (1) (2) (3) (4)

        2
  •  10
  •   Jon Skeet    14 年前

    当没有抛出异常时,仅仅添加try/catch块不太可能显著地改变性能,尽管这样做是可行的 可以 防止方法内联(不同的CLR版本有不同的内联规则;我记不清细节了。)

    这个 真实的 开销是指实际抛出异常时的开销,甚至这种开销通常也被夸大了。如果你使用例外 适当地 (即,仅在真正异常或意外的错误情况下)则它们不太可能对性能造成重大影响,除非您的服务过于繁琐,无法被视为“正常工作”。

    至于您是否应该尽可能多地使用try/catch块-绝对不是!通常情况下,只有在能够 手柄 这是相对罕见的。尤其是,仅仅吞下一个例外几乎是不可能的 总是 做错事。

    我写了更多的try/finally块(有效地-几乎总是通过 using 语句)而不是try/catch块。Try/catch有时在栈的顶层是合适的,这样即使一个请求失败,服务也可以继续处理下一个请求,否则我很少捕获异常。有时捕捉一个异常以将其包装到另一个异常中是值得的——基本上是翻译异常而不是真正地处理它。

        3
  •  2
  •   JMarsch    14 年前

    您肯定应该像这样测试索赔(足够简单),但不,这不会伤害您(这会有成本,但不是1000次)。

    抛出异常并处理它们是昂贵的。试一试……接球……最后还不错。

        4
  •  1
  •   Russ    14 年前

        5
  •  0
  •   Daniel Moura    14 年前

    有人告诉我 成本降低了1000倍 而不是没有,例如 一百万圈。这是真的吗?

    使用try-catch-block不是最好的吗 尽可能多?

        6
  •  0
  •   Jason Sundram Red Alert    14 年前

    为什么要猜测性能成本,当你可以基准,看看它是否重要?

        7
  •  0
  •   Just another metaprogrammer    14 年前

    这是一个非常昂贵的手术。另外,也可以尝试捕获块,使代码变得混乱,难以阅读。也就是说,对于大多数情况下会使应用程序崩溃的错误,异常是可以接受的。

    IMO不会对正常的程序事件使用exception(比如用户类型为非数字,而您尝试将其解析为数字)。使用正常的程序流构造(即if)。

    如果你使用的函数可能会抛出你做一个选择。错误是否严重=>使应用程序崩溃。错误是否非关键且可能=>捕获它(并可能记录它)。