• 仪表

   xcode5 引入了调试仪表,通过仪表可以直观的看出应用的CPU和内存占用量。运行一个程序,点击仪表栏。可以发现当程序处于运行状态时,调试导航面板会以柱状图显示CPU和内存占用量,并随着应用实时更新占用量数据。需要注意的是,调试导航面板中的数据是根据应用的硬件计算出来的,苹果电脑的CPU比iOS设备更快,如果在iOS模拟器上运行应用,调试导航面板中显示的CPU赞用量可能非常低,不低于分析性能问题。

  点击CPU可以在编辑区域打开CPU占用量报告。

  •   占用百分比(Precentage Utilized)

  根据运行应用设备的CPU核心数显示CPU占用比。例如,单核设备中最大CPU占用量是100%,而对双核设备中是200%,所以应用在单核设备中的CPU占用量通常比双核设备更高。如果应用处于空闲状态(进入后台活没有操作),CPU占用量会显示0%。

  •   占用环比(Utilization Comparison)

  使用环比图比较应用与系统中其他进程(Process)的CPU占用百分比。如果应用的CPU占用百分环比不高,但是运行不通畅,那么可以从该环形图中查看Other Processes的占用百分比。如果设备中后台运行的其他应用太多 ,就可能导致Other Processes的占用百分比很高,应用运行速度变慢。

  •   时间-占用比(Utilization over Time)

  使用折线图显示应用CPU占用量随运行时间变化的过程,以及占用量在运行时间内的峰值和谷值。

  •   线程(Threads)

  显示应用中每一个线程的时间-占用比。

  

  接下来我们打开我们应用 JXTouchTracker ,用手指在应用中绘制线条,手指不要离开屏幕,持续绘制大量线条可以发现应用的CPU占用比迅速升高-手指在屏幕上移动时,JXDrawView会不断收到 touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event 消息并调用 drawRect:(CGRect)rect 重绘自己。绘制的线条越多, drawRect:(CGRect)rect 的工作量就越大,CPU占用比就越高。

  回到吊事导航面板,点击Memory,打开内存占用量报告,如图:

  和CPU占用量报告类似,内存占用量报告直接的显示了应用内存占用的情况,但是Memery部分(位于最下方)显示的折线图可能会让我们误解:应用似乎始终占用了100%的内存。实际上,途中将运行时间内的占用峰值作为100%显示,因此途中y周的最大值与左侧High栏中显示的数值相同都是58.2MB。

  无论开发何种类型的应用,都应该尽可能降低CPU和内存占用量,提高应用的流畅度和用户体验。

  • Instruments

  从仪表和占用量报告中可以简要分析出应用的性能,但是,如果应用的CPU和内存占用量过高,需要从代码中查找性能问题,则可以使用 Instruments ,他提供了比仪表和占用量报告更详细的数据分析。

   Instruments 是一中与Xcode紧密集成的调试工具,可以实时监控并统计应用运行时的各项数据,生成详细的分析报告。它由若干组件组成,这些组件检查的事项包括:应用创建了那些对象,每一个方法和函数的CPU占用量、文件I/O和网络I/O等。通过使用这些不同的组件,可以找出程序中的性能瓶颈,发现代码中的问题。

  •  Allocations 组件

   Allocations 组件可以列出应用创建过的全部对此昂,以及这些对象所占用的内存大小。

  当监视某个应用时, Allocations 组件会对这个应用进行性能分析。虽然可以在模拟器上对某个应用进行性能分析,但是在真是的设备上进行可以得到更精确的数据。

  要对当前打开的项目执行性能分析,可以按住位于坐上角的 Run 按钮不放,然后在新出现的弹出窗口中选择 Profile

  Xcode会启动 Instruments 。 Instruments 会显示一个下拉窗口并列出所有可用的组件。选中 Allocations 。之后 Instruments 会启动应用并打开 Instruments 的主窗口。

   Allocations 组件会显示一张表格,流出应用 执行过的所有内存分配。因为数据比较多,所以先过滤,只列出由我们自己编写的代码创建的对象。首先在JXDrawView对象上画若干线条。然后在窗口 Category 查询框中输入 JXLine 

   Allocations 组件会过滤  Object Summary 表格所显示的条目,只列出和 JXLine 右端的内存分配,即我们自己创建的 JXLine 对象。

   #Persistent 列会显示某种对象的现存个数。 Persistent Bytes 列会显示这些现存对象占用了多少内存。 # Total 列会显示应用运行至今共创建了多少个某种类型的对象(其中包括已经释放的对象)。

最新文章

  1. [Unity3D][转] 关于Assets资源目录结构管理
  2. jquery判断当前设备是手机还是电脑并跳转
  3. 什么是FOUC?如何避免FOUC?///////////////////////////zzzz
  4. LeetCode Majority Element(简单题)
  5. Java线程练习
  6. LeetCode_Distinct Subsequences
  7. ES5 forEach()用法和提前终止遍历
  8. ElasticSearch 学习记录之ES查询添加排序字段和使用missing或existing字段查询
  9. OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Redis使用
  10. 一个跳转提示页面---JS
  11. SAP 使用
  12. POJ 2572
  13. C# 测算代码运行时间 Stopwatch
  14. c# 键值对照表
  15. css3动画效果小结
  16. [shell]关闭超时的进程
  17. springcloud(七) feign + Hystrix 整合 、
  18. 对一个 复杂的json结果进行取值的例子
  19. [Groovy]SoapUI怎样在Groovy脚本中读取变量的值
  20. 项目管理系列--谷歌的code review

热门文章

  1. Python标准模块--Unicode
  2. .NET平台开源项目速览(16)C#写PDF文件类库PDF File Writer介绍
  3. ASP.NET Core的路由[1]:注册URL模式与HttpHandler的映射关系
  4. python笔记(持续更新)
  5. 掌握javascript中的最基础数据结构-----数组
  6. 开发者最爱的Firebug停止更新和维护
  7. 【开发软件】 在Mac下配置php开发环境:Apache+php+MySql
  8. Nginx反向代理,负载均衡,redis session共享,keepalived高可用
  9. Linux课堂笔记(一)
  10. C#移动跨平台开发(2)Xamarin移动跨平台解决方案是如何工作的?