【问题标题】:AS3 try catch is heavy?AS3 try catch 重吗?
【发布时间】:2010-11-12 04:36:58
【问题描述】:

为什么使用 try catch 对应用程序性能不利?
我并不是说要使用 try catch 100 次。实际上,当我使用它数千次时。
真的会导致性能问题吗?

谢谢

【问题讨论】:

    标签: actionscript-3 performance coding-style try-catch


    【解决方案1】:

    try/catch(作为匿名函数)将创建一个 Activation 对象,该对象将使用更多内存,并且不会为您的局部变量使用寄存器。 所以使用它会消耗内存并减慢使用它的整个函数。

    您可以查看avm2 performance PDF,例如它没有讨论 try/catch,但您可以查看描述匿名函数的方法关闭章节,并使用相同的机制进行 try/catch。

    【讨论】:

    • 该链接不再指向参考文档。
    • 一个catch会减慢一个方法,即使它没有被使用,除非它是一个空的catch块。
    【解决方案2】:

    说到将异常用作一般做法,请记住异常是“异常的”。只要您将它们用于它们的用途 - 处理不应该发生的事件,就应该没问题。

    因此,不要尝试将异常用于分支、实现子例程或传递信息,它不应该对性能产生影响。即使它很重,它也意味着要在很长很长时间内调用一次。或者最好,从来没有。

    【讨论】:

    • 我有用 AS3 编写的聊天应用程序,每 1.5 秒我调用 web 服务来获取新消息。聊天是游戏的一部分,基于一个类的许多位置负责数据库迭代。出于这个原因,我在聊天中使用相同的类。每次当我调用 webservice url 时,如果 php 文件中出现问题,我会在响应中放入 try catch 语句以捕获无效的 json。因此,在聊天中,每次调用新消息时,都会通过 try catch 语句。我认为这是个坏主意? :)
    • Try 只是一个断言,它不是占用资源的部分。昂贵的是 throw 部分,因为解释器必须解开堆栈以“提升”异常,寻找一个 catch 语句将异常传递给。
    【解决方案3】:

    是的,当它捕获错误时,try and catch 语句非常慢(与其他操作相比)。显然它有其目的,但从不依赖于 try and catch 语句进行逻辑控制。它用于保护可能发生错误的代码(如文件 IO)。

    【讨论】:

      猜你喜欢
      • 2012-11-25
      • 2014-11-27
      • 1970-01-01
      • 2014-12-18
      • 2011-12-15
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 2020-02-11
      相关资源
      最近更新 更多