当前位置:  开发笔记 > 编程语言 > 正文

Flash/Actionscript CPU探查器

如何解决《Flash/ActionscriptCPU探查器》经验,为你挑选了2个好方法。

您是否找到了这样的工具并成功使用了它?



1> David Hanak..:

我也在寻找AS的分析器,但我想要一个与FlashDevelop和Flex SDK一起使用的免费软件/开源解决方案.我找不到.所以我写了一个简单的python脚本和一个更简单的AS类.该脚本基本上采用任何AS文件,并flash.utils.getTimer()为每个函数定义添加性能分析代码(即调用该函数的总运行时间,精度为1 ms - 调用的分辨率).脚本有时会出错,但这些通常很容易手工修复.然后,您需要手动添加一行:在某个时刻将分析统计信息转储到某处.这种方法显然远非准确,但它仍然可以让您很好地了解代码中的瓶颈.我成功地将它用于100k文件.

这是AS类:

package  {
    public class Profiler {
        private static var instance:Profiler;

        public static function get profiler():Profiler {
            if (!Profiler.instance) Profiler.instance = new Profiler;
            return Profiler.instance;
        }

        private var data:Object = {};

        public function profile(fn:String, dur:int):void {
            if (!data.hasOwnProperty(fn)) data[fn] = new Number(0);
            data[fn] += dur / 1000.0;
        }

        public function clear():void {
            data = { };
        }

        public function get stats():String {
            var st:String = "";
            for (var fn:String in data) {
                st += fn + ":\t" + data[fn] + "\n";
            }
            return st;
        }
    }
}

这是诀窍的python脚本:

import sre, sys

rePOI = sre.compile(r'''\bclass\b|\bfunction\b|\breturn\b|["'/{}]''')
reFun = sre.compile(r'\bfunction\b\s*((?:[gs]et\s+)?\w*)\s*\(')
reCls = sre.compile(r'class\s+(\w+)[\s{]')
reStr = sre.compile(r'''(["'/]).*?(? 0 and stack[-1]['depth'] == depth:
                lastf = stack.pop()
                line = "Profiler.profiler.profile('" + lastf['name'] + \
                    "', flash.utils.getTimer() - __start__);\n"
                body = body[:pos] + line + body[pos:]
                endpos += len(line)

        pos = endpos
        match = rePOI.search(body, pos)
    return body

def main():
    if len(sys.argv) >= 2: inf = open(sys.argv[1], 'rU')
    else: inf = sys.stdin
    if len(sys.argv) >= 3: outf = open(sys.argv[2], 'wU')
    else: outf = sys.stdout
    outf.write(addProfilingCalls(inf.read()))
    inf.close()
    outf.close()

if __name__ == "__main__":
    main()

随意使用,分发和修改两者.



2> 小智..:

Adobe最近发布了一个名为Adobe Scout的新的Flash分析工具:

http://gaming.adobe.com/technologies/scout/

这是旧的Flash Builder分析器的一个重大改进 - 它为您提供了详细的CPU时间细分,包括ActionScript执行和内部播放器功能,如渲染和网络.

试用期间免费 - 您只需注册免费的Creative Cloud帐户即可.之后,将继续提供免费的基本版本,并将完整版本作为付费Creative Cloud帐户的一部分提供.

推荐阅读
wurtjq
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有