zoukankan      html  css  js  c++  java
  • 如何降低应用程序对内存和CPU的消耗,提高程序运行效率(二)

    一、关于AS3中的提示

    在如何降低应用程序对内存和CPU的消耗,提高程序运行效率(一)一文中主要是关于一些较宽泛的注意事项。些来给大家一些特别注意的一些小的细节问题!

    使用AS3的一般性注意事项:

    • 使用变量时尽可能使用最有效的数据类型。Number要比uint和int的效率低一些,vector要比Array效率更高一些。
    • 对于字符串的搜和管理,应使用字符串的自带方法(例如:indexOf()等),而不建议使用效率较低的正则表达式。
    • 创建对象是尽可能在循环外部创建对象,而不是在循环内部创建对象。
    • 多次使用方括号应用对象会降低性能,因此需注意。例如:

              会降低性能的使用如下:

           //其中dogs为dog对象池中所创建的对象
            for(var i:int = 0 ;i < count ; i ++){//count为对象的个数
                  dogs[i].name = "哈骑士";      
                dogs[i].url = "http://http://www.cnblogs.com/xhz-blog";
                dogs[i].cry();
            }
                                                                                             

               优化代码如下:

            for(var i:int = 0 ; i < count ; i ++){
                dog = dogs[i];
                dog.name = "哈骑士";
                dog.url = "http://http://www.cnblogs.com/xhz-blog";
                dog.cry();
            }
                                                                                                                                                                                                         
    • 在使用循环时,应尽可能避免表达式计算,我们会很容易使用以代码:
    for(var i:int = 0 ; i < dogs.length ; i ++){
        //........
    }

    其实更好的做法是在循环外部用一个变量存贮这个数,然后再使用。

    var count:int = dogs.length;
    for(var i:int = 0 ; i < count ; i++){
        //......
    }
    • 函数调用比将全部或者大部分代码放在一个过程单元的开销大,减少函数调用在某些情况下可以显著提高程序的运行速率,但是从整个代码的架构和可维护性来讲,这将增加开销。这种我们就酌情考虑使用。
    • 对于计时器的使用要小心。对于非活跃性的应用程序计时器间隔较长的,使用计时器可以方便管理。而对于活跃性的我们往往使用帧事件处理(Event.ENTER_FRAME),对程序的每一帧进行处理。一般如果程序中确实要使用计时器,我们往往只使用一个计时器来集中管理整个应用程序。
    • 能使用异步操作(例如文件或数据库的操作)的绝不使用同步操作。
    • 避免使用大型的AS代码库,虽然增加了功能,但是使代码变得臃肿。

    二、关于事件处理

    • 记得使用removeEventListener()释放不再需要的事件处理程序。
    • 考虑使用回掉代替正常的事件来绕过DOM3事件机制。如果不再需要在事件模型中传播事件,则可以在监听程序中调用Event.stopPropagation

    三、界面提示

    • 在程序中一般使用开销小的现实对象,一般不到万不得已的时候不使用MoveClip,而是使用占用更少内存的Sprite.
    • 如果使用一些不需要用户交互的内容,则使用Shape对象,shape对象其开销远远小于Sprite或MoveClip。
    • 如果不再使用现实对象,就将其设置到不可见或者删除它。
    • 避免使用滤镜、混合和其他效果,使用这些会使现实对象所需的内存加倍。
    • 如果现实对象不需要触摸交互,则可以考虑禁用鼠标输入以减少事件发生。
    • 在移动开发中尽量不使用动画对象。
    • 如果只是用于显示文本我们就使用TextLine对象,如要用户输入时才使用TextFiled。
    • 设置TextFiled内容时使用appendText()比直接设置text属性效率更高。
    • 避免在循环内部对TextFiled设置text属性。

        其他关于界面的提示:

    • 避免使用Graphics类动态绘制,尽可能使用预渲染对象。
    • 在BitmapData对象渲染完成后调用dispose()方法立即清理内存。
    • 矢量图比位图需要较少的内存,但是占用较多的CPU资源。
    • 设置位图大小时往往使用2的整数次幂或者刚刚小于它,例如使用64*64或者63*63但是不要使用65*65。
    • 如果在显示对内部使用动画,一般我们要对于容器设置背景颜色。

    四、垃圾回收

    Air允许通过调用System.gc()强制进行垃圾回收。但不能经常调用它,因为他需要消耗CPU。

    五、”洗碗池(kitchen sink)”提示

    • 只嵌入实际使用的应用对象(字体、图形等)。
    • 尽可能压缩应用程序的一切内容。如减少JPG文件、声音或视频大小。
    • 对于移动设备尽可能使用设备字体。
    • 为每个想要播放的声音创建单个的Sound实例,用的时候再引用它。
    • 在应用程序启动时已经因方式启动任何音乐,将他们存在内存中。称作预加载技术
    • 测试内存量可使用getSize()方法。
  • 相关阅读:
    python线程池 ThreadPoolExecutor 的用法
    charles基本配置
    爬取咪哩咪哩动漫视频
    超级鹰识别验证码
    selenium滑动验证
    subprocess模块
    ffmpeg常用命令
    Appium环境搭建(详细)
    appium下载安装及环境配置
    MIPS——无符号乘法
  • 原文地址:https://www.cnblogs.com/xhz-blog/p/3354889.html
Copyright © 2011-2022 走看看