[心得] 用FlasCC编译c++代码为SWC执行效率测试

本测试以flasCC里面自带demo05为例修改而成,可自由扩展成其他用途。
(注:FlasCC的安装配置可参考我写的安装指南)

1.在资源管理器中直进入FlasCC_1.0.0\samples\05_SWC文件夹。

2.修改c++文件as3api.cpp(此文件附在附件中),添加一个累加方法。
  1. //累加计算方法,测试性能
  2. void largeMath() __attribute__((used,
  3.         annotate("as3sig:public function largeMath(keynum:Number):Number"),
  4.         annotate("as3package:flashcc.t1")));

  5. void largeMath()
  6. {
  7.           double num;
  8.           //获取as3传入的变量
  9.           AS3_GetScalarFromVar(num, keynum);
  10.           
  11.           //累加计算
  12.           double i = 0;
  13.           double sum = 0;
  14.           for( i = 0 ; i < num ; i++)
  15.           {
  16.                   sum += i;
  17.           }
  18.           
  19.           //返回结果给as3
  20.           AS3_Return(sum);
  21. }
复制代码

3.运行run.bat启动命令主界面,执行脚本cd 05_SWC跳转到demo文件夹。

4.执行编译命名:  
make FLASCC=/cygdrive/c/flascc/sdk FLEX=/cygdrive/c/flex_sdk/4.6  
(具体参数配置可参考我写的安装指南)

5.编译完成后,在资源管理器进入05_SWC文件夹把生成的MurmurHash.swc拷贝出来

6.在FB里面新建ActionScript工程(此工程附在附件中),建立libs库文件夹,把MurmurHash.swc拷贝进去。

7.在主类编写测试代码,as3的计算逻辑和c的一模一样。
  1.                 /**
  2.                  * as3累加计算
  3.                  * @param keynum
  4.                  * @return 
  5.                  * 
  6.                  */
  7.                 public function largeMath2(keynum:Number):Number
  8.                 {
  9.                         var num:Number = keynum;
  10.                         var i:Number = 0;
  11.                         var sum:Number = 0;
  12.                         for( i = 0 ; i < num ; i++)
  13.                         {
  14.                                 sum += i;
  15.                         }
  16.                         return sum;
  17.                 }
复制代码

8.在主构造函数里分别调用as3和c++计算方法。
  1.                         var num:Number = 10000000;
  2.                         trace("执行累加计算从0加到" + num);
  3.                         
  4.                         var lastTime:int = getTimer();
  5.                         var asSum:Number = largeMath2(num);
  6.                         trace("as 运行时间:" + (getTimer() - lastTime) +" ms");
  7.                         
  8.                         lastTime = getTimer();
  9.                         var cSum:Number = largeMath(num);
  10.                         trace("c++ 运行时间:" + (getTimer() - lastTime) +" ms");
  11.                         
  12.                         trace("结果是否相等: " + (asSum==cSum) + "");
复制代码

9.运行程序对比效率
我的电脑运行结果:
-----------------------------------------------
执行累加计算从0加到10000000
as 运行时间:820 ms
c++ 运行时间:66 ms
-----------------------------------------------
 FCC_T1.rar (680.75 KB, 下载次数: 74) 



Ps:
根据Gomo_Psivarh兄弟的提示,测试了一个整形循环运算。(注:观几位高人评论,此算法确实太过简单,没有什么借鉴意义,而且编译时开启了编译器优化,也许复杂的算法就没这么好了的优化效果了,待测试再来反馈结果)
关键代码:
  1.           long sum = 0;
  2.           for(long i = 0 ; i < num ; i++)
  3.           {
  4.                   sum += 1;
  5.           }
复制代码
-----------------------------------------------
--- 执行100000000次加法运算(浮点型) ---
as 运行时间:8666 ms
c++ 运行时间:492 ms
结果是否相等: true

--- 执行100000000次加法运算(整型)
as 运行时间:8647 ms
c++ 运行时间:0 ms
结果是否相等: true
-----------------------------------------------













你可能感兴趣的:(FlashCC)