Instruments性能检测

工具Instruments是干啥的就不再介绍了,毕竟用来检测性能的没用过也至少要听过吧!废话就不多说了,这边暂时只有介绍使用的针对优化的还没总结整理后期会更新哈,只能说优化是一条不归路,然而还是踏上了这条路。
本文主要讲解到以下几种常用的检测工具:

1、Time Profiler——检测CPU内存使用情况
2、Core Animation——离屏渲染,图层混合等GPU耗时
3、Leaks——检测内存的使用情况,包括内存泄露问题
4、Energy Log——耗电检测工具
5、Network——流量检测工具

前提

先检测是否开启了debug模式:

debug模式.png

如果没有开启,那设置一下哈。
检测是否设置了dSYM File,设置后的工程配置如下:

配置dSYM File.png

如果没有配置dSYM File在Instruments上检测结果没法直接查看对应的代码位置,只是显示地址。
这个很重要哈,新手经常没配置,然后各种点击查看没法看到具体出问题的代码,配置完成后开始下面的介绍。

设置完成后先运行一遍cmd + R,运行完成后Profile快捷键cmd+ i,再选对应的检测。

Time Profiler

TimeProfiler见名知意:时间分析工具,它会按照设定的时间间隔(默认1毫秒)来跟踪每一线程的堆栈信息(stacktrace),并通过比较时间间隔之间的堆栈状态,来推算出某个方法执行了多久,给出一个近似值。

Time Profiler检测界面.png

如果出现以上界面,一堆的地址那就是没有配置dSYM File,下面讲解一下Call Tree

Separate by Thread

按线程分开做分析,这样更容易揪出那些吃资源的问题线程。特别是对于主线程,它要处理和渲染所有的接口数据,一旦受到阻塞,程序必然卡顿或停止响应。

Invert Call Tree

反向输出调用树,把调用层级最深的方法显示在最上面,更容易找到最耗时的操作。

Hide Missing Symbols

隐藏缺失符号,如果dSYM文件或其他系统架构缺失,列表中会出现很多奇怪的十六进制的数值,用此选项把这些干扰元素屏蔽掉,让列表回归清爽。

Hide System Libraries

隐藏系统库文件。过滤掉各种系统调用,只显示自己的代码调用。

Flattern Recursion

拼合递归,将同一递归函数产生的多条堆栈(因为递归函数会调用自己)合并为一条。

Top Functions

找到最耗时的函数或方法。

以上的属性可以同时多选在其余的检测里面也是通用的,瞬间就有种酸爽的感觉了。

Core Animation

CoreAnimation系要注意的一点是必须是真机调试,用于调试离屏渲染,绘图,动画,等操作。

启用Core Animation

Xcode 9.3之后做了调整与Xcode 9.2有了很大的区别。

Xcode 9.3

Xcode 9.3 Core Animation检测设置debug option换成如下,只需要将程序运行起来就可以直接用了,不需要再进入Instruments(当然Core Animation界面还是有用的毕竟还是可以看FPSFPS越高说明界面就越流畅,最高是60,反之越多就越差哈)算是一种便捷方式吧,但是不清楚的还是进入Instruments可以让你找到怀疑人生。

Xcode 9.3.png
Xcode 9.2
Xcode 9.2.png

Xcode 9.2以及之前都是在Core Animation检测界面里面一般都是在底部,不同的版本有些差异。

属性介绍
Color Blended Layers—— 图层混合

显示出被混合的图层BlendedLayer(用红色标注),BlendedLayer是因为这些Layer是透明的(Transparent),系统在渲染这些view时需要将该view和下层view混合(Blend)后才能计算出该像素点的实际颜色。所以红色越少越好

Color Hits Green and Misses Red——图层缓存

很多视图Layer由于Shadow、Mask和Gradient等原因渲染很高,因此UIKit提供了API用于缓存这些Layer:[layer setShouldRasterize:YES],系统会将这些Layer缓存成Bitmap位图供渲染使用,如果失效时便丢弃这些Bitmap重新生成。所以绿色越多,红色越少越好

Color Offscreen-Rendered Yellow——离屏渲染

Offscreen-Rendering离屏渲染意思是iOS要显示一个视图时,需要先在后台用CPU计算出视图的Bitmap,再交给GPU做Onscreen-Rendering显示在屏幕上,因为显示一个视图需要两次计算,所以这种Offscreen-Rendering会导致app的图形性能下降。所以黄色越少越好

Color Misaligned Images——图片缩放

MisalignedImage表示要绘制的点无法直接映射到频幕上的像素点,此时系统需要对相邻的像素点做anti-aliasing反锯齿计算,增加了图形负担,通常这种问题出在对某些View的Frame重新计算和设置时产生的。

Color Copied images

标注应用绘制时被Core Animation复制的图片。

Color Immediately

Instruments在做color-flush操作时取消10毫秒的延时。

Color Compositing Fast-Path Blue

标记由硬件绘制的路径。

Flash Updated Regions

重绘的区域,勾选这些不同的选项可以在真机上看到不同颜色的渲染标注。

Leaks

Leaks是iOS程序中用来检测内存泄漏的工具,灵活的运用Leaks可以帮助我们预防程序中的内存泄漏防止程序内存耗用过大被挂起。首先双击Leaks点击左上角红色圆点运行,并且选中CallTree,在CallTree选项中勾选InvertCallTree和HideSystemLibraries选项如下图所示:

Leaks.png

检测的结果如下:

Leaks检测.png

针对对应的问题双击进入查看对应的代码。

Energy Log

电量检测,可以用Instruments上面的工具进行检测,具体如下:

检测耗电量.png

双击打开EnergyLog直接点击红色圆点运行程序,左侧依次即可看到CPU活动比例,网络活动比例,亮度状态,手机睡眠状态,手机连接蓝牙状态,手机连接wifi状态,手机GPS状态这次都是手机耗电的构成部分。

除了直接运行Energy Log检测耗电,还可以直接用用手机开启开发者模式,记录耗电情况然后将日志导入Energy Log,用来查看运行该App的耗电情况,具体操作就不多说了,有兴趣可以看这哥们的文章iOS耗电量检测与优化

我们也可以在Xoce启动程序时点击Xcode左侧状态栏,选择EnergyImpact选项,在右侧即可看到手机实时的耗电情况。

Xcode左侧状态栏耗电检测界面.png

对应的颜色状态:
绿色—合理
黄色—资源消耗高,你的程序比较耗电.
红色—资源消耗非常高,仅仅轻度使用你的app,用户就可以明显感到电量在消耗,用一会儿基本能感觉到手机发烫。

Network

双击打开Network直接点击红色圆点运行程序在上方便可以看到手机网络的输入输出大小,用鼠标拦截住一块区域就可以查看这个区间内是我们的App发生的网络消耗还是其他进程发生的,我们还可以查看到网络请求的本地地址和服务地址,输入和输出的大小等信息下面将详细介绍各种查看检测等方式:

Network检测界面.png

上图随便圈出一块消耗网络资源的地方,此时在下方有三个选项:

圈出区域.png

第一个:Processes代表查看网络进程,也就是你的App和其他程序的使用流量总大小。
第二个:Connections代表所有的访问网络请求的端口,输入输出大小,本地地址,数据包大小,往返时间等信息。
第三个:interfaces即在用户的角度当前手机的整体网络使用情况(不区分线程,只区分网络使用类型- wifi Or流量)。

Processes

我们可以发现工具把整个网络访问划分为两部分,我们的App和其他的进程,分别显示出它们的:

  • process:进程名。
  • data in请求数据大小。
  • packets in请求数据包大小。
  • data out发送数据大小。
  • packets out发送数据包大小。
  • duplicate Data Recv重传数据大小。
  • out-of-Order data传输失败数据大小。
  • retransmissions网络重传次数。
Connections

这个选项把所有的网络请求发生的数据交互明细都打印出来可以让我们一目了然的发现数据来自哪里,到哪里去,大小是多少,帧率是多少等信息。
相比Processes选项Connections选项多出了

  • local代表本地访问地址。
  • remote远程服务地址。
  • shortest Roundtrip:最短往返时间。
  • avg. Roundtrip:平均往返时间。
interfaces

interfaces代表在用户层面上的手机的网络使用情况,其中Interface选项代表网络环境,Connections代表总体连接次数其他选项和以上意义相同。

结语

常用的检测就介绍到这哈,相信小伙伴已经可以上车飚一波了吧!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容