as3 中trace() 函数对效率的影响
进行页游开发的过程中,很多开发者都有一个习惯,在数据输出中添加trace()函数来跟踪数值 - 不进行条件编译,发布的时候也不删除。实际上大量的trace函数会降低程序的效率,我们可以用一个简单的例子来试一试。
题目:共计10万件物品,随机分配到100个盒子中。实现非常简单,首先定义一个简单的物品结构

package net.geeeknerd.base.vo
{
public class Item
{
/**
* 物品类型
**/
public var type:int = 0;
/**
* 物品id
**/
public var id:int = 0;
/**
* 物品数量
**/
public var quantity:int = 0;
}
}

测试文档类
package{ import flash.display.Sprite; import flash.text.TextField; import flash.utils.Dictionary; import flash.utils.getTimer; import net.geeeknerd.base.vo.Item; /** * 测试trace()对程序的影响 **/ public class LLTest extends Sprite { /** * 存放物品的容器 **/ private var inventory:Dictionary = new Dictionary(true); /** * 用于显示运算时间 **/ private var txt:TextField; public function LLTest() { txt = new TextField; txt.text = "no"; this.addChild(txt); this.dicAddItems(); } /** * 向Dictionary中添加 10万个物品,100个种类 * */ public function dicAddItems():void { var time1:Number = getTimer(); var type:int; var item:Item; for(var i:int = 0;i < 100000;i++) { trace("当前进行第 " +i +" 次搜索。"); type = Math.floor(Math.random()*100); if(!this.inventory[type]) { item = new Item; item.id = i; item.type = type; this.inventory[type] = item; trace("物品增加: " ); } else { item = this.inventory[type]; item.quantity++; item.id = i; trace("添加了新物品: " ); } } trace("不使用break数组得到结果为: " + (getTimer() - time1)); txt.text = String(getTimer() - time1); } }} |
代码中有4行trace(),在调试模式下,程序运行时间 7813 ms
如果把trace()注释掉,程序运行时间 108 ms.之间的差距显而易见。
在发布的swf下,没有去掉trace函数,舞台上的text显示时间为 404ms
去掉trace,运行时间为72ms.可见虽然发布版的swf相对于debug版本的swf有相当程度的优化,但是trace()对程序仍然在效率上有不小的影响。
通常的做法是引入条件编译:条件编译具体做法请看 Bill Yuan 的 AS3 条件编译 ,把trace全部放入debug条件下。资深的开发团队会有自己开发的调试工具,自定制的调试控制台,但是这些调试工具也会编译到debug条件下。release版本必须是非常干净的程序应用本身。
as3 中trace() 函数对效率的影响的更多相关文章
- PHP 中数组函数 isset 效率比 array_key_exists 更高
PHP 中数组函数 isset 效率比 array_key_exists 更高 PHP 浏览:4194 2014年04月05日 isset 和 array_key_exists 函数都可以用来测试数组 ...
- AS3中ASCII码和字符互转函数
AS3中ASCII码和字符互转函数 字符转成ASCII码: 格式:字符串变量.charCodeAt(字符位置); var str:String = “A”; trace(str.charCodeAt( ...
- JS中创建函数的三种方式及区别
1.函数声明 function sum1(n1,n2){ return n1+n2; }; 2.函数表达式,又叫函数字面量 var sum2=function(n1,n2){ return n1+n2 ...
- 【PHP】最详细PHP从入门到精通(二)——PHP中的函数
PHP从入门到精通 之PHP中的函数 各位开发者朋友大家好,自上次更新PHP的相关知识,得到了大家的广泛支持.PHP的火爆程度不言而喻,函数作为PHP中极为重要的部分,应诸位的支持,博主继续跟进更新 ...
- 2019-2-14SQLserver中function函数和存储过程、触发器、CURSOR
Sqlserver 自定义函数 Function使用介绍 前言: 在SQL server中不仅可以可以使用系统自带的函数(时间函数.聚合函数.字符串函数等等),还可以根据需要自定义函数 ...
- (转)AS3 中,Function.apply、call中第一个参数的作用;与什么时候用
http://blog.csdn.net/linjf520/article/details/8746064 大家在使用Function.apply或是call时,是否发现,第一个参数不知道怎么用,赋值 ...
- 关于HashMap中hash()函数的思考
关于HashMap中hash()函数的思考 JDK7中hash函数的实现 static int hash(int h) { h ^= (h >>> 20) ^ (h >&g ...
- 《python解释器源码剖析》第12章--python虚拟机中的函数机制
12.0 序 函数是任何一门编程语言都具备的基本元素,它可以将多个动作组合起来,一个函数代表了一系列的动作.当然在调用函数时,会干什么来着.对,要在运行时栈中创建栈帧,用于函数的执行. 在python ...
- c++中的函数重载、函数重写、函数重定义
目录 一.函数重载 二.函数重写 三.函数重定义 为了更加深刻的理解 函数重载.重写.重定义,我们可以带着如下这两个问题去思考: 1.子类中是否可以定义父类中的同名成员?为什么? 可以,因为子类与父类 ...
随机推荐
- C++:this指针
this指针 this关键字:表示本类中的对象成员,可以通过this指针访问当前类的成员//举例 //例 3.18 隐藏this指针的引例 #include<iostream> using ...
- 转:Servlet的url匹配以及url-pattern详解
Servlet是J2EE开发中常用的技术,使用方便,配置简单,老少皆宜.估计大多数朋友都是直接配置用,也没有关心过具体的细节,今天遇到一个问题,上网查了servlet的规范才发现,servlet中的u ...
- JDBC学习总结(三)
1.ResultSet光标控制 在创建Statement或PreparedStatement时使用的是Connection的无参数createStatement()方法或preparedSta ...
- 特殊的css样式
在一定范围大小变化的div .div { width:auto; height:auto; min-height:100px; min-width:100px; max-height:200px; m ...
- ehcache版本冲突
以ehchache-core2.5为分水岭 缓存版本问题 版本不一样 配置不一样 ehcache-core-2.4.3.jar 与 ehcache-core-2.6.6 一 Caused by: n ...
- C#使用sharppcap实现网络抓包
sharppcap dll的下载地址: http://sourceforge.net/directory/os:windows/?q=sharppcap 具体使用详细步骤: http://www.co ...
- input默认提示取消
input 输入框有提示功能,当你之前输入过一些内容,你下次打入相关字符的时候,默认会有之前输入的一些相关的字符的提示,这个提示一般来说还是很好的,但是,有时候,我们想自己输入,不想要提示. 如果不需 ...
- android中getSystemService详解
android的后台运行在很多service,它们在系统启动时被SystemServer开启,支持系统的正常工作,比如MountService监 听是否有SD卡安装及移除,ClipboardS ...
- UVa 1640 (计数) The Counting Problem
题意: 统计[a, b]或[b, a]中0~9这些数字各出现多少次. 分析: 这道题可以和UVa 11361比较来看. 同样是利用这样一个“模板”,进行区间的分块,加速运算. 因为这里没有前导0,所以 ...
- UITableViewCell上的按钮点击事件处理
转自: http://www.aichengxu.com/view/42871 UITableViewCell上的按钮点击事件处理,有需要的朋友可以参考下. 今天突然做项目的时候,又遇到处理自定义的 ...