performance - if-else 比 switch 快,为什么? (在 ActionScript3 中)

标签 performance actionscript-3 if-statement switch-statement

测试了以下内容:

        var timer:int = getTimer();
        trace(timer);

        for ( var g:int = 0; g < 10000000; ++g)
        {
            var mod0:int = g % 10;
            var sum0:String = "";

            switch(mod0)
            {
                case 0: sum0 = "0"; break;
                case 1: sum0 = "1"; break;
                case 2: sum0 = "2"; break;
                case 3: sum0 = "3"; break;
                case 4: sum0 = "4"; break;
                case 5: sum0 = "5"; break;
                case 6: sum0 = "6"; break;
                case 7: sum0 = "7"; break;
                case 8: sum0 = "8"; break;
                case 9: sum0 = "9"; break;
                default: break;
            }
        }

        timer = getTimer();
        trace(timer);

        for ( var h:int = 0; h < 10000000; ++h)
        {
            var mod1:int = h % 10;
            var sum1:String = "";

            if (mod1 == 0)      sum1 = "0";
            else if (mod1 == 1) sum1 = "1";
            else if (mod1 == 2) sum1 = "2";
            else if (mod1 == 3) sum1 = "3";
            else if (mod1 == 4) sum1 = "4";
            else if (mod1 == 5) sum1 = "5";
            else if (mod1 == 6) sum1 = "6";
            else if (mod1 == 7) sum1 = "7";
            else if (mod1 == 8) sum1 = "8";
            else if (mod1 == 9) sum1 = "9";
        }

        timer = getTimer();
        trace(timer);

计时器给出: 221 第443章 第636章 ,这意味着 switch 需要 222ms,而 if-else 需要 193ms,为什么?
据我所知,在 C++ 中,switch 速度更快,因为它编译为跳转表汇编代码,在 AS3 中不应该是一样的吗?

最佳答案

这里有一个非常彻底的研究:http://jacksondunstan.com/articles/793

TL;DR:actionscript 编译器有点糟糕。此外,AS3 中的 switch 语句比 C/C++ 等要复杂得多,因为它可以处理非整数类型。

关于performance - if-else 比 switch 快,为什么? (在 ActionScript3 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14580570/

相关文章:

windows - 与 GitHub 相比,Windows 文件共享上的 Git 速度慢

python - sparse_hash_map 对于特定数据非常慢

actionscript-3 - Away3D 中的平铺和拉伸(stretch)

actionscript-3 - AS3如何仅在x轴上开始拖动?

regex - perl中正则表达式中的OR条件

java - JasperReports - 处理从数据库到 PDF 的大数据

c - 提高在 C 中合并两个文件的 IO 性能

php - 阻止人们入侵Flash游戏的基于PHP的高分表的最好方法是什么

javascript - 如果 iframe 刷新失败,则 X

Java 有效日期和 JOptionPane