一、Timer Profiler简述
使用时间分析器工具对系统CPU上运行的进程执行低开销、基于时间的采样。随着时间的推移,多核和线程的使用效率越高,应用程序的性能就越好。
Time Profiler主要用来检测应用CPU的使用情况,可以帮助我们分析代码/方法的执行时间,找出程序变慢的原因,告诉我们那些方法使用时间较多,可以进行响相应的优化。
原理:
- Time Profiler,每隔一个测量时间段(1ms),Instruments会暂停程序的执行,并且把每个运行线程的堆栈进行采样。通过对比堆栈,推算出来方法的执行时间。
- 可以类比一下点击了xcode的debugger按钮,并且每一毫秒暂停一下。以此来获得堆栈信息取样,并计算出来在某个方法中停留的大致执行时间。这样处理不是一个很精确的时间,但是对于调试还是很有效果的。
- 线程方面,当线程处于挂起或者等待执行状态时,Time Profiler并不能统计到此时的线程,它只能统计到真正在CPU上执行的线程
- 图示
- (1)、方法1,会有6个采样点(采样点1~采样点6),即6个
Samples
,占用6ms。 - (2)、 方法2,有4个采样点(采样点2~采样点4),即有4个
Samples
,占用4ms。 - (3)、方法3,可以看出时间间隔不到1ms,因此并不会有采样。
- (4)、 方法4,有两个采样点(采样点4~采样点5),即2个
Samples
,占用2ms。
- (1)、方法1,会有6个采样点(采样点1~采样点6),即6个
二、调试的前提
- 必须要在真机上进行profile。如果使用模拟器的话,模拟器会使用MAC的资源,导致手机的硬件限制是没有的
- build setting中的调试信息的存储格式
DEBUG_INFORMATION_FORMAT
,release模式下,一定是dwarf-with-dsym
,即DSYM格式的文件。
3.必须要是再Release模式下才可以进行调试,
- (1). 不然,展示出来的样本全都是地址,不展示方法的名字
-
(2). 主要是因为Xcode在debug环境下,会禁用Watch Dog。Watch Dog会监测应用的性能,如果超出了该场景所规定的的运行时间,Watch Dog会强制终结App的进程。
三、面板介绍
四、运行流程
测试代码:
@interface ViewController ()<NSURLSessionDelegate>
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self delayMethod1];
[self delayMethod2];
}
//耗时方法1
- (void)delayMethod1{
NSLog(@"delayMethod_1 : ------start");
for (int i=0; i<1000; i++) {
NSLog(@"delayMethod_1-----i = %d",i);
}
NSLog(@"delayMethod_1 : ------end");
}
//耗时方法2
- (void)delayMethod2{
NSLog(@"delayMethod2------start");
for (int i=0; i<300000; i++) {
NSLog(@"delayMethod_2-----i = %d",i);
}
NSLog(@"delayMethod2------end");
}
@end
1、进行profile
-
(1)、点击执行,运行一段时间后,可以得到下面的示例
-
(2)、可以使用
option
+鼠标,进行时间轴的缩放
-
(3)、call tree的操作
-
(4)、耗时代码查看以及采样的展示
-
(5)、查看耗时代码流程