1分钟学会Instrument CPU Profiler 优化C

2023-05-28  本文已影响0人  pengxiaochao

最近项目主要功能已经完成,所以针对项目需要做一个性能优化,以检查代码里是否有些代码写的不够优秀,是否有可优化的空间,从而使 App用最小的性能消耗满足功能的实现;

使用工具
Xcode 14.0.1
Instruments

第一步: 打开Xcode自带的Instruments

image.png

选择 CPU Profiler工具

image.png

按上面操作,build 成功后弹出 Instruments工具,选择CPU Profiler选项

到这里之后,我们前期的准备工作做完啦,下面开始正式的测试!

1.选中Xcode先把程序 (command + R)运行起来
2.选中真机设备,选择需要检测的 app项目;
3.点击Recoder录制,底部工具栏有个Call Tree的选项,点开,选中Invert Call Tree 和Hide System Libraries; (如下图所示)

Separate by Thread -> 按线程分割
Invert Call Tree -> 反转调用顺序
Hide System Libraries -> 隐藏系统库
Flatten Recursion -> 展平递归

选中 CPU Usage 这一栏,也可展开查看,每一个核心的性能损耗在哪些函数调用上;

image.png

4.依次找出CPU占用率较高的函数调用栈,看看是否有优化的必要;(举个例子如下图所示)
这里NSDateNSString的转换是是个类方法,每次都要创建NSDateFormatter对象, 因此会产生不必要的性能损耗,所以我们可以创建一个 static类型的NSDateFormatter对象,从而减少某些常用对象的创建销毁, 进而减少CPU的使用率;

5.在整个工具中,CPU占用率最高的从上往下排,可以找到看看哪些是自己实现的代码,有优化空间,进而优化后再看整个appCPU的占用率是否有下降;

image.png
原始代码
+ (NSString*)stringWtihTimeInterval:(NSTimeInterval)interval {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss SSS"];
    NSDate *dateNow =  [NSDate dateWithTimeIntervalSince1970:interval];
    NSString *currentTimeString = [formatter stringFromDate:dateNow];
    return currentTimeString;
}

修改后的代码
static NSDateFormatter *formatter;

+ (NSString *) stringWtihTimeInterval:(NSTimeInterval)interval {
    if (!formatter) {
        formatter = [[NSDateFormatter alloc] init];
        [formatter setDateFormat:@"YYYY-MM-dd HH:mm:ss SSS"];
    }
    NSDate *dateNow =  [NSDate dateWithTimeIntervalSince1970:interval];
    NSString *currentTimeString = [formatter stringFromDate:dateNow];
    return currentTimeString;
}

CPU Profiler 性能调优是每一个iOS高级开发都必须要掌握的技能,今天就简单记录一下,谢谢各位看官姥爷🙏;

上一篇下一篇

猜你喜欢

热点阅读