一个方法告诉你as3的removeChild性能有多烂

其实as3这个坑我早就踩过,不过那时没太注意,最近把项目的removeChild干掉换成了visible=false,发现效率质的提升……

先贴一下代码吧

        private function testRemoveChild():void
        {
            var startTime:int = getTimer();
            var count:int = 9999;
            for (var i:int = 0; i < count; i++)
            {
                var sp:Sprite = new Sprite();
                addChild(sp);
            }

            trace("创建对象计算用时",getTimer()-startTime,"毫秒");

            startTime = getTimer();
            while(this.numChildren)
                this.removeChildAt(this.numChildren-1);;
//            while(this.numChildren)
//                this.removeChildAt(0);

            trace("移除对象计算用时",getTimer()-startTime,"毫秒");
        }

输出

创建对象计算用时 95 毫秒
移除对象计算用时 4317 毫秒

这个测试很简单,不过却看出一点,如果场景上有对象进进出出的话……光removeChild就吃掉了一截cpu。adobe这吭一直到现在都没填好,也不怪苹果说它懒了。

为了解决removeChild吃性能的问题,我用了visible=false+对象池代管理来解决。发现fps确实提高了,但是真正的解决还需要一个条件就是flash player10.3……

上一张论坛里找到一帖子,原话是这样的

"话说 AS3 中,在舞台外的某显示对象的 visible 设为 false,之后其是否还会被重绘的问题,发现有不少兄弟还搞不太清。  故在此做下说明:Flash Player 10.3 以前的版本仍然会重绘,10.3 以后的版本就不会再被重绘了。请大家注意!"

最后我总结一个提高性能的方案,用LRU对象池+visible=false管理,完美提高运行效率。

时间: 2024-10-11 13:40:30

一个方法告诉你as3的removeChild性能有多烂的相关文章

(二)线程同步_1---同步一个方法

同步一个方法(Synchronizing a method) 在并发编程中,最常见的情景莫过于多线程共享同一资源的情景了,例如多个线程同时读写相同的数据或者同时访问相同的文件或数据库连接,如果不采取一个控制机制,那么就会造成数据的不一致甚至是错误发生: 为了解决这些问题,引入了临界区域(critical section)的概念,一个临界区域是指一个用来控制资源访问的代码块,以保证被访问的资源不会同时被多个线程访问,从而保证了数据的一致性: java中提供了Synchronization机制,当一

接口测试基础知识详解http请求由三部分组成,分别是:请求行、消息报头、请求正文 1、请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本,格式如下:Method Request-URI HTTP-Version CRLF 其中 Method表示请求方法;Request-URI是一个统一资源标识符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了

HTTP URL (URL是一种特殊类型的URI,包含了用于查找某个资源的足够的信息)的格式如下:http://host[":"port][abs_path]http表示要通过HTTP协议来定位网络资源:host表示合法的Internet主机域名或者IP地址:port指定一个端口号,为空则使用缺省端口80:abs_path指定请求资源的URI:如果URL中没有给出abs_path,那么当它作为请求URI时,必须以"/"的形式给出,通常这个工作浏览器自动帮我们完成.e

高逼格,超简单,实现App自动更新,一个方法搞定

前言 前段时间写了一个篇APP自动更新下载的文章自动更新,一个方法搞定,使用系统的DownloadManager 方法超简洁的实现了apk的下载,不过有好多网友反映有一些机型上面这个方法无法实现下载,经过小编的实验在部分机型上确实会有这个问题,所以其中下载的部分只能通过其它方法搞定了.正好看到网上好多关于使用Retrofit实现下载并且监听进度的文章,并且我一直在看Retrofit的东西但是一直没有机会用到,所以我正好拿这个练练手,最终我使用Retrofit + OkHttp + RxBus +

区块链:一个故事告诉你比特币的原理及运作机制

一个故事告诉你比特币的原理及运作机制 周末花时间看了一些比特币原理相关的资料,虽然不敢说把每个细节都完全搞懂了,不过整体思路和关键部分的主要原理还是比较明白.写一篇文章分享给大家.这篇文章的定位会比较科普,尽量用类比的方法将比特币的基本原理讲出来.这篇文章不会涉及算法和协议中比较细节的部分,打算后面会再写一篇程序员视角下的比特币原理,那里会从技术人员的视角对比特币系统中较为关键的数据结构.算法和协议进行一些讲解. 在这篇文章中我会给出一个虚拟的村庄叫"比特村",整个文章会以讲故事的方式

六种简单方法提升ASP.NET Web API性能

ASP.NET Web API 是非常棒的技术.编写 Web API 十分容易,以致于很多开发者没有在应用程序结构设计上花时间来获得很好的执行性能. 在本文中,我将介绍8项提高 ASP.NET Web API 性能的技术.  1) 使用最快的 JSON 序列化工具 JSON 的序列化对整个 ASP.NET Web API 的性能有着关键性的影响. 在我的一个项目里,我从 JSON.NET 序列化工具转到了 ServiceStack.Text 有一年半了. 我测量过,Web API 的性能提升了2

定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容。提示(可以了解python的urllib模块)

1 定义一个方法get_page(url),url参数是需要获取网页内容的网址,返回网页的内容.提示(可以了解python的urllib模块) 2 import urllib.request 3 4 def get_page(url): 5 response = urllib.request.urlopen(url) 6 html = response.read() 7 return html 8 9 print(get_page(url='https://www.baidu,com'))

Rails::Application中的一个方法调用

Ruby语言的动态性使得想仅仅通过查找相关API文档来学习Rails是完全不够的,因为API文档只记录了静态代码定义的方法,而Rails中有很多的方法都是在加载时或运行时动态生成的,想要了解这些方法必须要阅读源代码.本文以Rails工程下的config/application.rb文件中的一个方法调用为例,分析方法调用的具体过程. 1. 问题描述 假设Rails工程叫做Sample,那么在config/application.rb中会定义Sample::Application,并可以在其中调用c

35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n); (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和; (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n

  35.按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现int method(int n)接口方 法时,要求计算1到n的和: (3)编写另一个类:ClassB来实现接口InterfaceA,实现int method(int n)接口 方法时,要求计算n的阶乘(n!): (4)编写测试类E,在测试类E的main方法中使用接口回调的形式来测试实现 接口的类. p

VC ON_CONTROL_RANGE多个控件响应一个方法

步骤/方法 分三个步骤 在头文件中声明函数例如 afx_msg void onNum(UINT uID) 在.cpp文件中添加函数体 void CCalculatorDlg::OnNum(UINT uID) { UINT index=uID-IDC_NUM_0; CString num; num.Format(_T("%d"),index); AfxMessageBox(num); } 4 添加消息映射 ON_CONTROL_RANGE(BN_CLICKED,IDC_NUM_0,IDC