`

[转] 加载SWF时一些有趣的测试

 
阅读更多
这几天做了一个关于加载和内存变化.以及被加载文件的清除的测试;

小有心得~不敢独享,摆到这里让各位大大拍砖;
代码如下:
public class LoadArrangeMain extends Sprite
        {
               
                public function LoadArrangeMain()
                {
                        init();
                }
                private function init():void {
               
                        trace("start Memory : " + System.totalMemory);
                       
                        loadStart();
                }
                private function loadStart():void {
                        var loader:Loader = new Loader();
                        var loadcontext:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);
                        loader.load(new URLRequest("loadSwf.swf"), loadcontext);
                        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandle);

                }
                private function completeHandle(e:Event):void {
                        trace("loaded Memory : " + System.totalMemory)
                        trace(" IS HAS definetion atem? " +ApplicationDomain.currentDomain.hasDefinition("com.loadedSwf.Atem"));
                        e.currentTarget.removeEventListener(e.type, arguments.callee);
                        var loader:Loader = e.currentTarget.loader as Loader;
                        var loadSwf :*= loader.content;
                        stage.addEventListener(MouseEvent.CLICK, loadSwf.showMessage,false,0,true);
                        loadSwf = null;
                        loader.unloadAndStop(true);
                        loader = null;
                        //gc();
                        setTimeout(getDefinition, 3 * 1000);
                }

                private function getDefinition():void {
                        trace("unloaded Memory : " + System.totalMemory)
                        trace(" IS HAS definetion atem? " +ApplicationDomain.currentDomain.hasDefinition("com.loadedSwf.Atem"));
                                        }
                private function gc():void {
                        try {
                                var local_1:LocalConnection = new LocalConnection();
                                var local_2:LocalConnection = new LocalConnection();
                               
                                local_1.connect("foo");
                                local_2.connect("foo");
                        }catch (e:Error) {
                                trace("GC\n")
                        }
                       
                }
                        }
复制代码
输出结果为:
start Memory : 3006464
loaded Memory : 3866624
IS HAS definetion atem? true
unloaded Memory : 3690496
IS HAS definetion atem? true

加入SWF 后内存增加了 860000 B左右,通过unload 和GC之后 约小了 200000 左右;
那么剩下的是什么呢?
继续测试:
var arr:Array=[];
var loaders:Array=[];
for (var i:int=0;i<50;i++){
arr.push("loadSwf.swf");
}
load();

private function load(e:Event=null):void{
     if(arr==ull|| arr.length<1) complete();
var loader:loader=new Loader();
loader.load(new URLRequest(arr.shift()));
loader.contentLoadInfo.addEventLsiener(Event.COMPLETE,load);
loaders.push(loader);
}

private function complete():void{
trace ("loaded memory :"+System.totalMemory);
for each(var loader:Loader in loaders){
laoder.unloadAndStop(false);
loader=null;
}
loaders=null;
setTimerOut(showMemory,3*1000);
}

private function showMemory():void{
    trace("lasted  Memory:"+System.totalMemory);
}
复制代码
输出结果:
start memory 3035136
loaded memory 7426048
unload memory 4116480



通过后面的输出,我才知道~SWF被unload之后和我以为的清除存在着天壤之别;
它含有的类信息,已经被遍译好留在内存中了,而且如果此类绑到了库的素才,那占用的内存也会更大。

那么,第一个测试中我还给主SWF加了一个MouseEvnet.CLICK的弱引用,侦听器是 loadSwf实例中的公开方法;
常理,我们unload掉 该实例后 弱引用就会被清除了,可结果我测试出乎意料,一直都会响应!也就是 被加载的SWF 实例仍在内存中!
这个原因,深表遗憾,我实在是没有研究出来,我会在后面继续追加,如果有哪位大大知道具体原因,也希望你在跟贴中指点一二。
分享到:
评论
1 楼 cloud21 2011-07-05  
自然是仍然存在引用了。

相关推荐

    透明的swf小文件

    然而,对于那些仍然需要SWF的场合,确保测试在不同浏览器和设备上的兼容性,并尽可能减小文件大小以提高加载速度。 综上所述,透明SWF文件是一种实用的多媒体元素,尤其在网页和课件设计中发挥着重要作用。虽然面临...

    IQ 测试软件 很好玩 test

    用户可能通过浏览器加载这个SWF文件来运行测试。 关于IQ测试软件的知识点可以包括以下几点: 1. **智力测试原理**:IQ测试通常基于多元智能理论,包括逻辑推理、数学能力、语言理解、视觉空间、记忆、处理速度等...

    为同事开发的flash游戏.zip

    Flash允许将这些资源打包在SWF文件中,或者在运行时动态加载,以优化加载时间和游戏性能。 5. **交互性与用户体验**:良好的游戏体验离不开用户的参与。Flash游戏通常包含丰富的用户交互元素,如鼠标点击、键盘输入...

    最流行的图片播放效果

    当图片数据较大时,如何在不影响用户体验的前提下快速加载是需要考虑的问题。 2. **循环播放机制**:图片能够自动循环播放,意味着该系统具备定时器或者状态管理功能,能够在一张图片展示结束后无缝切换到下一张,...

    透明flash素材百例

    2. 动态效果:如加载动画、过渡效果、粒子特效等,使网页更加生动有趣。 3. 信息展示:通过动态展示,可以使信息传达更有效,比如教程、产品演示等。 4. 广告宣传:透明背景的Flash广告可以更自然地嵌入网页,不破坏...

    马马虎虎&nbsp;

    这种效果通常设计得简单而有趣,能吸引用户的注意力,同时传达出“请稍候”的信息。 【描述】:“下载效果用于网页的等待中……”这段描述进一步明确了“马马虎虎”可能是指在网页下载数据时显示的等待动画或进度...

    VC中利用FLASH制作图声并茂的动画程序

    接下来,我们探讨如何加载和播放SWF文件。在代码中,你需要使用控件的属性和方法来实现这一功能。例如,可以通过设置`Flash1-&gt;Movie`属性来指定要播放的SWF文件路径,如`Flash1-&gt;Movie = "happy.swf";`。为了启动...

    flash2.0制作的单项选择调用txt里的题目智能题库(入门版)

    标题 "flash2.0制作的单项选择调用txt里的题目智能题库(入门版)" 描述了一款基于Flash AS2.0技术开发的教育软件,它是一个智能题库系统,能够读取TXT文本文件中的题目,用于创建单选题测试。这个系统对于初学者来...

    flash相册 动态展现图片

    在使用Flash相册时,应注意优化文件大小以提高加载速度,提供HTML5备选方案以便于移动设备和不支持Flash的浏览器访问,同时确保良好的用户体验,如提供清晰的导航和控制选项。 总结,Flash相册是一种将图片动态...

    如何在Dreamweaver CS3中插入多媒体.pdf

    - 你可以调整Flash对象的尺寸、对齐方式,以及是否在加载页面时自动播放。 5. **优化和测试多媒体** - 插入多媒体后,确保检查文件大小和格式是否适合网页加载。过大或不兼容的文件可能会影响用户体验。 - 使用...

    如何制作FLASH MTV

    在加载界面中,可以制作一个加载条,展示视频加载进度,同样可以使用ActionScript实现。 **发布** 完成所有编辑后,进行预览测试,确保所有元素正常工作。最后,通过Flash的“文件”→“发布”功能,导出为SWF...

    flash飞机类设计游戏

    10. **发布与调试**:完成游戏开发后,需要将Flash项目导出为SWF文件,并在各种环境中测试,确保兼容性和稳定性。Flash的调试工具可以帮助开发者定位和修复问题。 通过学习和实践这些知识点,你可以创建出一款像...

    XML画册的制作FLASH源文件

    在本教程中,我们将探讨如何利用Flash制作基于XML的个人画册,让您的相册变得更加生动有趣。 XML是一种轻量级的、可扩展的标记语言,用于存储和传输数据。在Flash中,XML可以用来组织和控制内容的显示,例如图片的...

    30232_2.zip_show_vb flash

    例如,`LoadMovie`方法用于加载SWF文件,`Play`方法启动动画播放,`Stop`方法则暂停播放。 4. **ActionScript与VB交互**:Flash中的ActionScript可以与VB进行通信,通过`ExternalInterface`类实现。在ActionScript...

    flash制作的查查游戏

    9. **测试与调试**:在Flash CS3的测试模式下运行游戏,确保所有功能正常工作。修复任何程序错误,并根据用户反馈进行调整。 10. **发布与部署**:完成游戏开发后,导出SWF文件,可以嵌入到网页中,或者打包为独立...

    很炫的相册flash效果

    5. **测试与发布**:在Flash中进行测试,确保所有功能正常运行,然后发布SWF文件,可以嵌入到网页中,或者作为独立的Flash应用程序。 6. **集成到网站**:将发布的SWF文件嵌入HTML代码中,确保正确设置尺寸和属性,...

    Flash 个人博客网站制作

    1. 测试与调试:在发布前,确保所有功能正常运行,检查并修复可能存在的问题。 2. 优化性能:减少不必要的动画和代码,优化文件大小,提高网站加载速度。 3. 发布设置:根据需求选择不同的发布选项,如HTML文件、SWF...

    昆虫保卫战小游戏_flash游戏_flashgame_

    7. **调试与发布**:开发完成后,开发者会使用Flash Professional的预览和发布功能来测试游戏,并生成最终的.swf文件供用户在线游玩。 通过研究这个压缩包,初学者可以了解到一个基本的Flash小游戏是如何从概念到...

    在页面添加Flash

    通过将Flash嵌入到网页中,可以实现更加生动有趣的效果。本文将详细介绍如何在HTML页面中嵌入Flash动画,包括必要的代码片段及其作用。 #### 二、基本概念 在开始之前,我们需要了解几个基本的概念: 1. **SWF...

    新型flash+xml相册代码

    4. **解析XML**:在Flash中加载并解析XML文件,将其中的数据绑定到相应的界面上,完成图片的动态加载。 5. **测试与优化**:在各种浏览器和设备上测试相册的性能和兼容性,根据反馈进行调整和优化。 6. **发布与...

Global site tag (gtag.js) - Google Analytics