【问题标题】:Which is efficient: Switch, If or function?哪个是有效的:开关、如果还是函数?
【发布时间】:2010-10-28 14:22:27
【问题描述】:

我将需要处理一个钢琴键,该琴键可以在 Flex 应用程序中的虚拟钢琴上重复按键和释放的情况下尽可能快地响应而不会产生高 CPU 负载。

调用函数更有效还是Switch?

例子:

switch(keyNote)
case 'c4': keypress.button=down;
case 'c4': keypress.button=down;
case 'c4': keypress.button=down;
case 'c4': keypress.button=down;
case 'c4': keypress.button=down;
case 'c4': keypress.button=down;

function () {
if (keyNote=='c4'){keypress.button=down}
if (keyNote=='c4'){keypress.button=down}
if (keyNote=='c4'){keypress.button=down}
if (keyNote=='c4'){keypress.button=down}
}

function c4_Key() {
keypress.button=down;
}

我也想知道是否有另一种方法使用dispatchevent通过id调用按钮并将按钮设置为down状态?

【问题讨论】:

  • 我不知道这在 actionscript 中是否可行,但我会推荐一个哈希表。
  • 提防过早的优化 - 在您知道存在问题之前,不要修复性能瓶颈。首先分析您的应用,然后优化实际减慢应用的因素。
  • 鉴于您之前的问题,我怀疑这就是您的性能问题所在......

标签: apache-flex actionscript-3 actionscript air


【解决方案1】:

不要使用你自己的 if、if、if 函数。编译器不喜欢选项(例如 if 可以是 true 或 false ) 我会创建一个字典对象,这样你就可以得到如下响应:

var keyMap:Dictinary = new Dictionary()
//Here you would populate the dictionary with the diff. keys and values

//pseudo body of keyDown test funcion
keyMap[keyNote].keypress.down; 

或者你的示例代码想要做的任何事情:)

【讨论】:

  • 字典比开关更优雅(当然也比一堆 if 更优雅)。我不确定它是否更快(尽管我也怀疑这是否会成为真正的瓶颈)。一方面,当你使用开关时,编译器会构建一个非常紧凑的跳转表;我敢打赌这比 actionscript 字典快(但是,正如我所说,差异应该几乎不明显)。
【解决方案2】:

好吧,如果你问一些 OOP 专家,最好的办法是避免像瘟疫这样的条件。 http://www.as3dp.com/2007/12/21/lets-get-rid-of-conditionals/

想法是每个条件都在一个单独的类中,该类覆盖/扩展将执行切换的函数。

虽然我个人并没有在我的代码中消除条件句的使用,但我确实尝试在条件句上使用这种方法。而且您确实可以通过这种方式替换所有(几乎)条件,有时好处不会超过其中的工作,特别是如果您知道您不会扩展代码。

【讨论】:

    猜你喜欢
    • 2016-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2010-10-08
    • 1970-01-01
    相关资源
    最近更新 更多