Cocos开发中性能优化工具介绍(一):Xcode中Instruments工具使用

转载 2016年05月31日 17:39:23

Instruments是动态分析工具,它与Xcode集成在一起,可以在Xcode中通过菜单Product→Profile启动。启动如图所示,Instruments有很多跟踪模板可以动态分析和跟踪内存、CPU和文件系统。

20141105205211115.jpg

每个跟踪模板都有不同的用途,其中Leaks可以检测内存泄漏点,Allocations跟踪模板可以查看内存的使用情况。下面我们通过一个实例介绍一些Instruments工具的使用,我们来人为制造一个内存泄漏,我们在HelloWorldScene.cpp中修改代码:

1
2
3
4
5
6
7
8
9
10
11
bool HelloWorld::init()
{
    if ( !Layer::init() )
    {
        return false;
    }
    __String *s = new __String();
    log("%s",s->getCString());
… …
    return true;
}

我们在代码中添加了__String *s = new __String()语句,使用new关键字分配内存,然而直到init函数结束我们都没有使用delete s语句释放它。这样的语句会导致内存泄漏。


首先启动Instruments工具,在图对话框中选择Leaks跟踪模板,点击按钮Profile进入如图所示界面。

20141105205301394.jpg

在Instruments中,虽然选择了Leaks模板,但默认情况下也会添加Allocations模板。基本上凡是分析内存都会使用Allocations模板,它可以监控内存分布情况。选中Allocations模板(图中①区域),右边的③区域会显示随着时间的变化内存使用的折线图,同时在④区域会显示内存使用的详细信息,以及对象分配情况。点击Leaks模板(图中②区域),可以查看内存泄漏情况,如图20-3所示,如果在③区域有红线出现,则有内存泄漏,④区域则会显示泄漏的对象。

20141105205407265.jpg

点击上图中出现的泄漏点(红线)在④区域打开详细界面,如下图所示,可以发现一个cocos2d::__String对象,可以看到它的内存地址、占用字节、所属框架和所属函数等信息。

20141105205340862.jpg

点击工具栏View中的按钮,打开扩展详细视图,如图20-5所示,可以看到右边的跟踪堆栈信息,其中图标所示的条目是我们自己应用的代码,双击HelloWorld::init()可进入程序代码,如图所示。

20141105205409644.jpg

20141105205420580.jpg

图所示的第33行代码就是泄漏点程序代码了,我们从中不难发现问题。

如果我们想进一步评估它对于内存的占用情况,可以看看Allocations模板的折线图。从图中看到,各种变量的使用内存占用情况,也可以知道某个时刻的内存占用情况。4号区域是Heap(堆)内存占用情况,因为堆内存需要人为释放,而栈内存不用人为管理。

20141105205433855.jpg

事实上,内存泄漏是极其复杂的问题,工具使用是一方面,经验是另一方面。提高经验,然后借助于工具才是解决内存泄漏的根本。



第一次使用转载:http://www.cocos.com/doc/tutorial/show?id=1837

Cocos开发中性能优化工具介绍之Xcode中Instruments工具使用

Instruments是动态分析工具,它与Xcode集成在一起,可以在Xcode中通过菜单Product→Profile启动。启动如图所示,Instruments有很多跟踪模板可以动态分析和跟踪内存、...
  • tonny_guan
  • tonny_guan
  • 2014年11月05日 20:57
  • 5499

XCode中 instruments 工具使用

比较了好多关于instruments 还是发现老外写的比较牛逼.于是果断翻译过来.有能力的的可以去看英文原版,鼓励大家看原版资料远离二手教程。这里是原文   入门 为了节省大家的时间...
  • Winzlee
  • Winzlee
  • 2017年05月17日 11:54
  • 240

三、Instrument之Allocations工具(内存分配)

一、Allocations检测工具二、Allocations设置Xocde 7.0.1 右下角面板,您可在这里修改您想要查看的分配类型的相关设置。除了确保 Created & Persistent ...
  • xiaoxiaobukuang
  • xiaoxiaobukuang
  • 2016年04月08日 16:09
  • 1846

Xcode 8 Instruments工具集的变化与趋势

最近项目比较赶,没看Xcode 8的发布说明,不过,在做性能优化时,发现Instruments工具集比Xcode 7少了几项,被精简的工具中有一项对我们项目影响较大,就是GPU Driver。 Xc...
  • u014068781
  • u014068781
  • 2016年10月14日 09:36
  • 2209

iOS性能调优利器——Instruments的使用

最近采用Instruments 来分析整个应用程序的性能.发现很多有意思的点,以及性能优化和一些分析性能消耗的技巧,小结如下。 Instruments使用技巧 关于Instruments官...
  • iOSbird
  • iOSbird
  • 2016年08月01日 15:08
  • 2541

开启Instruments之旅吧

翻译:Launch Instruments
  • sky_snow45
  • sky_snow45
  • 2015年12月16日 17:35
  • 1089

Xcode如何使用Instruments处理Zombie(内存僵尸)

iOS开发中经常会碰到的且很棘手的问题是内存僵尸,就是Zombie。造成这个原因是在我们使用某个对象的时候,其实这个对象已经被释放,被内存回收了。这个时候再使用就会出现错误。如图所示: ...
  • fishmai
  • fishmai
  • 2016年12月16日 14:59
  • 669

性能优化检测Instruments-time profile的使用

使用Instruments中的time profile工具进行运行时间的耗时检测。 打开Instruments(注意:需要先打开要检测的项目文件,然后Xcode的菜单栏中选择打开Instruments...
  • potato512
  • potato512
  • 2017年02月14日 15:50
  • 724

cocos2dx3.2 xcode中资源路径设置问题

在xcode中,将资源分类,然后将各自的文件夹添加到Resources,运行程序的时候老是报错, 说是找不懂资源,原因就是找不到资源路径。那么如何设置呢? 1、首先在 xcode左边的Resour...
  • aiwobiezoukaicnew
  • aiwobiezoukaicnew
  • 2015年01月03日 12:41
  • 661

性能优化Instruments-Leaks工具使用

性能优化中使用Instruments的Leaks工具进行内存泄露的检测。 内存泄露,即内存被分配及使用过后,即使不再使用的该内存,也一直未被释放,从而造成无法被其他对象使用。 在ARC内存管理模式...
  • potato512
  • potato512
  • 2017年02月14日 16:44
  • 1113
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Cocos开发中性能优化工具介绍(一):Xcode中Instruments工具使用
举报原因:
原因补充:

(最多只允许输入30个字)