标题: Instruments 性能检测工具介绍 [打印本页] 作者: lsekfe 时间: 2022-5-26 10:02 标题: Instruments 性能检测工具介绍 Instruments之Allocations
内存分配监测内存爆增,在峰值做标记 Generations。 Time Profiler 时间分析工具
它会按照设定的时间间隔(默认1毫秒)来跟踪每一线程的堆栈信息(stacktrace),并通过比较时间间隔之间的堆栈状态,来推算出某个方法执行了多久,给出一个近似值。
dSYM文件是指具有调试信息的目标文件。 Separate by Thread
按线程分开做分析,这样更容易揪出那些吃资源的问题线程。特别是对于主线程,它要处理和渲染所有的接口数据,一旦受到阻塞,程序必然卡顿或停止响应。 Top Functions找到最耗时的函数或方法。
Separate by Thread:每个线程被单独考虑。这能让你知道哪一个线程占用CPU最多。
Invert Call Tree:选中该选项后,调用栈会自上至下显示。这通常是你需要的,因为你想知道CPU花费时间的那个最深的方法。
Hide System Libraries:选中该选项后,只有你自己app中出现的符号会被显示出来。通常选中该选项是有用的,因为你只关心CPU在你自己的代码中的哪一部分花费时间,你没法对系统库使用CPU做多少改变。
Flatten Recursion:该选项将每一个调用栈中的递归函数(调用它们自身的函数)视作单一入口,而不是多入口。
Top Functions:选上这一选项让Instruments将花费在一个函数中的总时间视作在该函数中直接花费的时间加上调用的其他函数花费的时间。所以如果函数A调用了函数B,那么函数A花费的总时间被记为A花费的时间加上B花费的时间。这一选项非常有用,因为它能让你在每次进入调用栈时找到花费最长的时间,瞄准你最耗时的方法。
看到网上有人说主线程耗时过多进行优化的,有的是网络请求耗时过多进行优化的,有的是UIImage耗时过多进行优化的,总之,可以看到哪个函数耗时多,进而优化,在这里不由得想起了本文开头提到的一位网友说的:Instruments的价值在于,它使我们深刻理解我们代码的内部运作。 诚不欺吾。 应用程序一定要使用发布配置
在发布环境打包的时候,编译器会引入一系列提高性能的优化,例如去掉调试符号或者移除并重新组织代码。另iOS引入一种"Watch Dog"[看门狗]机制,不同的场景下,“看门狗”会监测应用的性能,如果超出了该场景所规定的运行时间,“看门狗”就会强制终结这个应用的进程。开发者可以crashlog看到对应的日志,但Xcode在调试配置下会禁用"Watch Dog"
总结:性能优化是在所有更能实现完成时要做的事,使用Time Profile工具分析app每个流程的执行情况,发现耗时的地方,合理优化,提升用户体验,切记,优化后要做一遍详细的[url=]测试[/url],别修了东墙坏了西墙。 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 s是iOS程序中用来检测内存泄漏的工具
灵活的运用Leaks可以帮助我们预防程序中的内存泄漏防止程序内存耗用过大被挂起。首先双击Leaks点击左上角红色圆点运行,并且选中CallTree,在CallTree选项中勾选InvertCallTree和HideSystemLibraries选项。
首先我们看一看内存溢出和内存泄漏的区别。 内存溢出 out of memory,是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。 内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
使用上述两种方法(**1)Instruments-Leaked (2)内存管理器Analyze?** 来检查内存泄漏,是我们最常用的两种。 流畅度(Animation Hitches)
1.FPS (Frames Per Second)每秒绘制帧的数量:帧率
2.滑动屏幕时,帧率理想值为60FPS
3.滑动屏幕时,帧率越高表示性能越好;帧率过低意味着屏幕可能出现卡顿,存在随机丢帧的可能。
4. =57为优秀;>=55为良好;>=50为可接受;
5.测试点:列表元素、动画播放