以前在使用instrument之前记得配置相对应的dSYM,否则到时候Time Profiler看到的将是调用函数的26进制的地址,这不便我们去发现问题。
dSYM是什么鬼?
在每次编译后都会生成一个 dSYM 文件,程序在执行中通过地址来调用方法函数,而 dSYM 文件里存储了函数地址映射,这样调用栈里的地址可以通过 dSYM 这个映射表能够获得具体函数的位置。一般都会用来处理 crash 时获取到的调用栈 .crash 文件将其符号化。
Time Profiler 概览
当点击Time Profiler应用程序开始运行后.就能获取到整个应用程序运行消耗时间分布和百分比.为了保证数据分析在统一使用场景真实行有如下点需要注意:
在开始进行应用程序性能分析的时候,一定要使用真机,模拟器运行在Mac上,然而Mac上的CPU往往比iOS设备要快。相反,Mac上的GPU和iOS设备的完全不一样,模拟器不得已要在软件层面(CPU)模拟设备的GPU,这意味着GPU相关的操作在模拟器上运行的更慢,尤其是使用CAEAGLLayer来写一些OpenGL的代码时候. 这就导致模拟器性能数据和用户真机使用性能数据相去甚运.
另外在开始性能分析前另外一件重要的事情是,应用程序运行一定要发布配置 而不是调试配置.在发布环境打包的时候,编译器会引入一系列提高性能的优化,例如去掉调试符号或者移除并重新组织代码.另iOS引入一种"Watch Dog"[看门狗]机制.不同的场景下,“看门狗”会监测应用的性能。如果超出了该场景所规定的运行时间,“看门狗”就会强制终结这个应用的进程.开发者可以crashlog看到对应的日志.但Xcode在调试配置下会禁用"Watch Dog".
time profile时间分析工具用来检测应用CPU的使用情况,可以看到应用程序中各个方法正在消耗CPU时间,使用大量CPU不一定是个问题。客户端中动画就对CPU依赖就非常高,动画本身也是非常苛刻且耗费资源较多的任务。
使用步骤
1.打开XCode工程
2:选择Xcode工具栏里的Product->Profile
3:点击Profile
4:点击Time Profile,点击下面蓝色的Call Tree 弹出框如图:
Separate byt Thread(建议选择):通过线程分类来查看那些纯种占用CPU最多。
Invert Call Tree(不建议选择):调用树倒返过来,将习惯性的从根向下一级一级的显示,如选上就会返过来从最底层调用向一级一级的显示。如果想要查看那个方法调用为最深时使用会更方便些。
Hide Missing Symbols(建议选择):隐藏丢失的符号,比如应用或者系统的dSYM文件找不到的话,在详情面板上是看不到方法名的,只能看一些读不明的十六进值,所以对我们来说是没有意义的,去掉了会使阅读更清楚些。
Hide System Libraries(建议选择):选上它只会展示与应用有关的符号信息,一般情况下我们只关心自己写的代码所需的耗时,而不关心系统库的CPU耗时。
Flatten Recursion(一般不选):选上它会将调用栈里递归函数作为一个入口。
Top Functions(可选):选上它会将最耗时的函数降序排列,而这种耗时是累加的,比如A调用了B,那么A的耗时数是会包含B的耗时数。
5:点击开始按钮如图:
6:导航栏信息
XCode9 下面的instruments 只有 Weight 和 Self-Weight 和 Symbol Name
Weight :调用它自身和它的子类花费的时间以及战总时间的百分比。
Self-Weight :自身花费的时间。
Symbol Name : 被调用的名字。
7:函数执行的时间和占比
8:双击(如图7(2))选中的行,会出现如图:
9:点击如图8右上角Xcode图标的代码,进入Xcode修改代码
总结:熟能生巧,大家多练习。
文章中如有错误,请指正,尽自己最大的能力给大家写正确的东西,码农不易,请点击喜欢,你的支持是我最大的动力,如有互相交流,请私信。谢谢大家支持
参考: