基本的优化总结(二)

导言

上一篇描述了通过Systrace分析绘制的问题,里面也有提到过,某一帧绘制过久,那么这可能是代码等地方有问题,具体分析代码问题,这时候就轮到TraceView发挥作用了

基础

TraceView有两种使用模式:
1.可以在DDMS里面手动开启,然后再手动停止,然后生成的trace默认为这段时间内的记录,常用于在不确定具体卡顿代码的情况下

2.可以在代码中指定开始和结束

 Debug.startMethodTracing("test");
 ...
 Debug.stopMethodTracing();

常用于分析指定代码或者具体操作

面板分析

实例

看一下重点指标就可以了
Cpu Time:实际执行的时间(不包括线程被挂起的等待时间)
Real Time:执行的总时长(Cpu Time+等待的时间)
Calls+RecurCalls:函数执行的总次数(包括递归执行)

简单的分析方法就是考虑一个函数的执行次数和单次执行时间,执行次数过多的话要考虑是不是有过度调用或者递归的问题,执行时间过长的话要考虑进行优化操作

调用链分析

可以通过选择具体的某个函数来看到该函数下面调用的其余函数的具体耗时,从而链式的向下分析


函数调用情况

从图中可以看出,当前函数内部的三个函数基本上瓜分了执行时间,那么后续就可以对这三个函数继续进行调用链分析,分析的目的是在最后能够对执行时间进行优化。

举例说明

这里通过代码中指定的方式来观察一个网络请求的开始到结束
我们这里就简单观察一下数据解析,因为返回数据都是为JSON串,统一都需要转换为对象处理,这时候转换的速度也就是我们关心的指标,这里对比一下Gson和FastJson的情况,对象统一不采用注解,仅仅是提供一致的字段名及对应的get/set方法


Gson的结果
FastJson的结果

从结果上面很直观的看出来FastJson的解析效率高一些,从追求性能的方向上面考虑可能使用FastJson会相对好一些。
同时也要注意到Json解析是一个相对耗时的操作,应当尽可能的放入到工作线程中处理而不是阻塞主线程,毕竟480ms已经相当于30帧左右的时间了

总结

TraceView常用于分析方法的具体执行时间,可以作为一种常用的调优手段。
当然常规的使用模式应该是先通过Systrace来发现UI卡顿问题,然后再使用TraceView进行细化分析,这样配合会更加的合适

文章系列:
基本的优化总结(一)
基本的优化总结(二)
基本的优化总结(三)
基本的优化总结(四)
基本的优化总结(五)
基本的优化总结(六)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 今天晚上我和妈妈做了一个酸奶蛋糕,非常好吃,我以前在幼儿园学过,今天我是主厨妈妈帮忙。制作方法是:先把鸡蛋...
    碎片幻影阅读 583评论 0 1
  • 1、首先需要添加引用:NPOI.dll文件 2、using NPOI.SS.UserModel; using ...
    你我知道的事阅读 543评论 0 0
  • 一大早,她就被刺耳的电话铃声吵醒,老公接了电话,起床要走,她懒懒地问:“起来给你做点吃的吧?”“不用了,还早,你再...
    丽日晴空阅读 208评论 0 0