Instrument使用总结
Instruments简介
Instruments是一个强大而灵活的性能分析和测试工具,它是Xcode工具集的一部分。 它旨在帮助您分析OS X和iOS应用程序,进程和设备,以更好地理解和优化其行为和性能。 将Instruments从应用程序开发流程开始纳入您的工作流程,可以帮助您在开发周期的早期发现问题,从而为您节省时间。
有效的使用Instruments,你可以:
- 检查一个或多个应用程序或进程的行为
- 检查设备特定的功能,如Wi-Fi和蓝牙
- 在模拟器或物理设备上执行分析
- 创建自定义DTrace instruments来分析系统和应用行为的各个方面
- 追踪源代码中的问题
- 对您的应用进行性能分析
- 在您的应用程序中查找内存问题,例如leaks(没有释放,内存泄漏), abandoned memory(分配内存,未使用), and zombies(引用释放的对象)
- 找出优化您的应用的方法提高效率
- 进行一般的系统级故障诊断
- 保存Instruments配置模板
Blank
打开一个空白模板,可以任意添加其他模板分析工具
Activity Monitor
该模板监视指定的一个或多个进程的总体CPU,内存,磁盘和网络使用情况统计信息。该模板可以与OS X或iOS一起使用。
Allocations
捕获有关应用程序内存分配的信息。它仅记录来自单个进程的信息。
Core Animation
捕获有关所选动画统计信息。它可以记录单个进程或系统上运行的所有进程的信息。
Color Blended Layers (图层混合)
很多情况下,界面都是会出现多个UI控件叠加的情况,如果有透明或者半透明的控件,那么GPU会去计算这些这些layer最终的显示的颜色,也就是我们肉眼所看到的效果。例如一个上层Veiw颜色是绿色RGB(0,255,0),下层又放了一个View颜色是红色RGB(0,0,255),透明度是50%,那么最终显示到我们眼前的颜色是蓝色RGB(0,127.5,127.5)。这个计算过程会消耗一定的GPU资源损耗性能。如果我们把上层的绿色View改为不透明, 那么GPU就不用耗费资源计算,直接显示绿色。
如果出现图层混合了,打开Color Blended Layers选项,那块区域会显示红色,所以我们调试的目的就是将红色区域消减的越少越好。那么如何减少红色区域的出现呢?只要设置控件不透明即可。
(1)设置opaque 属性为NO。
(2)给View设置一个不透明的颜色,没有特殊需要设置白色即可。Color Hits Green and Misses Red(光栅化)
这个选项主要是检测我们是是否正确使用layer的shouldRasterize属性,shouldRasterize = YES开启光栅化。
光栅化是将一个layer预先渲染成位图(bitmap),再加入到缓存中,成功被缓存的layer会标注为绿色,没有成功缓存的会标注为红色,正确使用光栅化可以得到一定程度的性能提升。
适用情况:一般在图像内容不变的情况下才使用光栅化,例如设置阴影耗费资源比较多的静态内容,如果使用光栅化对性能的提升有一定帮助。
非适用情况:如果内容会经常变动,这个时候不要开启,否则会造成性能的浪费。例如我们在使用tableViewCell中,一般不要用光栅化,因为tableViewCell的绘制非常频繁,内容在不断的变化,如果使用了光栅化,会造成大量的离屏渲染降低性能。
如果你在一个界面中使用了光栅化,刚进去这个页面的所有使用了光栅化的控件layer都会是红色,因为还没有缓存成功,如果上下滑动你会发现,layer变成了绿色。但是如果你滑动幅度较大会发现,新出现的控件会是红色然后变成绿色,因为刚开始这些控件的layer还没有缓存。
注意点:
(1)系统给光栅化缓存分配了一个固定的大小,因此不能过度使用,如果超出了缓存也会造成离屏渲染。
(2)缓存的时间为100ms,因此如果在100ms内没有使用缓存的对象,则会从缓存中清除。Color Copied Images(图片颜色格式)
Shows images that are copied by Core Animation in blue苹果官方注释被拷贝给CPU进行转化的图片显示为绿色。那么这句话怎么理解呢?如果GPU不支持当前图片的颜色格式,那么就会将图片交给CPU预先进行格式转化,并且这张图片标记为蓝色。那么GPU支持什么格式呢?苹果的GPU只解析32bit的颜色格式,如果使用Color Copied Images去调试发现是蓝色,这个时候你也可以去找你们的UI眉眉了~Color Non-Standard Surface Formats (不标准的表面颜色格式)
?Color Immediately(颜色刷新频率)
当执行颜色刷新的时候移除10ms的延迟,因为可能在特定情况下你不需要这些延迟,所以使用此选项加快颜色刷新的频率。Color Misaligned Images(图片大小)
这个选项可以帮助我们查看图片大小是否正确显示。如果image size和imageView size不匹配,image会出现黄色。要尽可能的减少黄色的出现,因为image size与imageView size不匹配,会消耗资源压缩图片。Color Offscreen-Rendered Yellow(离屏渲染)
离屏渲染Off-Screen Rendering 指的是GPU在当前屏幕缓冲区以外新开辟一个缓冲区进行渲染操作。还有另外一种屏幕渲染方式-当前屏幕渲染On-Screen Rendering ,指的是GPU的渲染操作是在当前用于显示的屏幕缓冲区中进行。 离屏渲染会先在屏幕外创建新缓冲区,离屏渲染结束后,再从离屏切到当前屏幕, 把离屏的渲染结果显示到当前屏幕上,这个上下文切换的过程是非常消耗性能的,实际开发中尽可能避免离屏渲染。
触发离屏渲染Offscreen rendering的行为:
(1)drawRect:方法
(2)layer.shadow
(3)layer.allowsGroupOpacity or layer.allowsEdgeAntialiasing
(4)layer.shouldRasterize
(5)layer.mask
(6)layer.masksToBounds && layer.cornerRadius
为了尽可能避免触发离屏渲染,我们可以换其他手段来实现必要的功能:
1)阴影绘制shadow:使用ShadowPath来替代shadowOffset等属性的设置
imageViewLayer.shadowPath = CGPathCreateWithRect(imageRect, NULL);
(2)利用CoreGraphics生成一张带圆角的图片或者view。Color Compositing Fast-Path Blue (快速路径)
Places a blue overlay over content that is detached from the compositor.标记由硬件绘制的路径为蓝色,蓝色越多越好Flash Updated Regions (重绘区域)
Colors regions on your iOS device in yellow when those regions are updated by the graphics processor.这个选项会对重绘的内容高亮成黄色,重绘就是指使用Core Graphics绘制,绘制会损耗一定的性能,因此重绘区域应该越小越好。
Energy Log
提供有关能源使用的诊断信息以及主要设备组件的基本开/关状态
Leaks
捕获泄漏内存的信息,它只能记录来自单个进程的信息。
Metal System
通过提供来自应用程序,驱动程序和GPU图层的跟踪信息来描述iOS金属应用程序的性能。
Network
分析应用程序使用的TCP / IP和UDP / IP连接
System Trace
提供有关系统行为的全面信息。它显示了线程调度的时间,并通过系统调用和内存操作显示了从用户到系统代码的线程转换。
System Usage
监视应用程序套接字和共享内存相关的系统I / O活动并记录文件
Time Profiler
Time Profiler帮助我们分析代码的执行时间,找出导致程序变慢的原因
Zombies
测量一般的内存使用情况,同时重点检测过度释放的“僵尸”对象。 还提供了按类别分配对象的统计信息以及所有活动分配的内存地址历史记录
Instrument使用总结相关推荐
- Java字节码instrument研究
MyAgent项目 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="h ...
- java.lang.instrument 学习(一)
[+] 转自:http://jiangbo.me/blog/2012/02/21/Java-lang-instrument/ Instrumentation介绍: Java Instrumentati ...
- [转]java.lang.instrument 学习(一)
[转]java.lang.instrument 学习(一) 收藏 sunyh 发表于 10个月前 阅读 40 收藏 3 点赞 1 评论 0 转自:http://jiangbo.me/blog/201 ...
- java.lang.Instrument 动态修改替换类代码
java.lang.Instrument 动态修改替换类代码 | java.lang.Instrument包是在JDK5引入的,程序员通过修改方法的字节码实现动态修改类代码. 这通常是在类的main方 ...
- java.lang.Instrument 代理Agent使用
原文出处: 陶邦仁 java.lang.Instrument包是在JDK5引入的,程序员通过修改方法的字节码实现动态修改类代码.这通常是在类的main方法调用之前进行预处理的操作,通过java指定该类 ...
- java入参为方法_Java命令注入原理结合Java Instrument技术(FreeBuf首发)
一.前言 命令注入:恶意用户构造恶意请求,对一些执行系统命令的功能点进行构造注入,从而达到执行命令的效果. 二.演示环境搭建 这里采用springboot+swagger搭建一个模拟的web环境:启动 ...
- java 上溯_java中Instrument的上溯造型
继承最值得注意的地方就是它没有为新类提供方法.继承是对新类和基础类之间的关系的一种表达.可这样总结该关系:"新类属于现有类的一种类型". 这种表达并不仅仅是对继承的一种形象化解释, ...
- java Instrument修改字节码实现aop功能
Agent工程2个类: public class MyAgent {/*** 该方法在main方法之前运行,与main方法运行在同一个JVM中* 并被同一个System ClassLoader装载* ...
- 定义一个Instrument(乐器)类,并使用共有的play()方法,再分别定义子类 管乐器 打击乐器 弦乐器,使用重写play方法,实现每种乐器的独特play方式。
package Extends; public class Instrument { public void play(){ System.out.println("使用乐器!") ...
- 【JVM】字节码与ASM字节码增强、Instrument实现类的动态重加载
目录 字节码与ASM字节码增强 什么是字节码? 字节码结构 操作数栈与字节码 字节码增强 ASM 运行时类加载 Instrument JPDA与JVMTI instrument实现热加载的过程 字节码 ...
最新文章
- Faster R-CNN
- Java代码注释规约
- 深入理解Java内存架构
- Unity3D获取Andorid设备返回键,主页键等功能
- mysql生成app接口_Java实现app接口和Socket消息传递(10)java连接MySQL实现App登录接口...
- 如何访问另一台电脑的共享文件夹_如何远程控制另一台电脑
- Anaconda 镜像源操作(查看配置删除)
- 嵌入式Linux系统编程学习之十一Linux进程的创建与控制
- 差异表达基因变化倍数_2020年筛个基因也还能发SCI?
- 计算机底纹不起作用,CSS - 背景颜色在IE11中不起作用(CSS - background-color not working in IE11)...
- Java 并发编程 --- ThreadPoolExecutor(五)
- docker mysql node_Docker打包nodejs项目和数据库
- HDU 2209 翻纸牌游戏
- 计算某天是星期几数字或文本形式的JAVA工具方法
- numpy实现BN层
- 数学建模 计算机,计算机数学建模.pdf
- 出生率新低!1978-2020中国人口出生率、死亡率及自然增长率变迁
- 翻译--CenterNet-将目标看作点
- 古诗词在线起名 - 一刀工具箱
- 基于R语言结构方程模型
热门文章
- 【IIS问题】——默认网站localhost无法打开,错误类型404
- 2018.9.13 贷款月供计算器
- 前端优化之二 图片优化——质量与性能的博弈
- 计算机驱动恢复出厂设置在哪里,Windows系统恢复出厂设置在哪?怎么恢复出厂设置?...
- java 图片画框并读取成base64数据
- flex:1是什么意思
- android绘制半圆弧线_半圆形进度条Android - 绘制半圆
- win10系统让图片打开方式为照片查看器
- 计算机协会维修照片,照片门事件后,当年那个毁了陈冠希的电脑修理员,如今变成这样!...
- 基于深度学习目标检测的人工智能玩游戏