zoukankan      html  css  js  c++  java
  • iOS

    iOS内存优化基础
    腾讯帧动画优化方案

    基础内存优化

    1.I/O性能优化

    减少I/O次数是性能优化的关键点:

    • 将零碎的内容作为一个整理进行写入
    • 使用合适的I/O操作API
    • 使用合适的线程
    • 使用NSCache做缓存能够减少I/O

    1-1.NSCache

    • 自动清理系统占用的内存
    • NSCache线程安全
    • 缓存对象被清理时会有回调
    • 可以控制是否清理

    2.内存性能

    突然的大量内存需求是会影响相应的:

    • 【强制】优化计算的复杂度从而减少CPU的使用
    • 【强制】在应用相应交互的时候停止没必要的任务处理
    • 【强制】设置合适的Qos
    • 【强制】将定时器任务合并,让Runloop更多时候处于idle状态

    3.控制App的Wake次数(帧动画暂时不考虑)

    通知、VoIP、定位、蓝牙都会使设备被唤醒,唤醒的过程比较大的消耗。

    图片优化进阶

    原理分析

    1.图片加载解码

    比较容易影响性能:

    • 加载图片(取决于CPU和I/O)
      • 提前加载图片(可以设置优先级,优先级高的可以预加载。不可以延迟加载,因为延迟加载不能保证每帧提前加载到图片)
    • 图片解码(比加载图片更加耗时,博文中测试结果是3倍,iOS默认是在主线程图片解码的,但是解码后的图片太大,一般不会缓存到disk中,但是我可以尝试)

    2.缓存

    缓存分为原图片的缓存和解码后的位图数据的缓存。

    3.渲染

    3-1.offscreen rendring

    图片在绘制当前屏幕的时候,显卡需要进行一次渲染,然后在绘制到当前屏幕。
    对于显卡来说,onscreen和offscreen上下文切换时非常昂贵的(设计OpenGL的pipeline和barrier等)。

    - layer mask
    - layer.maskToBounds
    - layer.allowGroupOpacity = YES
    - layer.opcaity < 1.0
    - layer.shouldRasterize = YES
    - layer.cornerRadius
    - layer.edgeAntialiasingMask
    - layer.allowsEdgeAntialiasing
    

    3-2.Blending 混合像素颜色是会导致性能问题

    优化点

    • 精灵序列帧
    • 提前解码在渲染前,不要渲染了去解码
    • 缓存解码后的位图数据 disk 和 内存中,因为有些礼物效果比较普遍使用
    • 图像素材像素尽量对其,尽量减少透明像素
  • 相关阅读:
    个人推荐网上商店
    vs 安装程序制作
    this linker was not configured to use sysroots和C compiler cannot create executables的解决办法
    将asihttprequest编译后的目标文件打包
    cygwin下的gcc4.7.1编译心得
    给ubuntu12.04换3.4.6的内核
    boost::asio::streambuf相关的操作方法
    应用boost库serialize标准库里的map
    cygwin下gdb7.4编译
    sql server存储过程分页,支持cte
  • 原文地址:https://www.cnblogs.com/R0SS/p/8708216.html
Copyright © 2011-2022 走看看