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

标签: cocos 开发 性能优化 | 发表时间:2014-11-05 20:57 | 作者:关东升
出处:http://www.iteye.com

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



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

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. bool HelloWorld::init()  
  2. {  
  3.     if ( !Layer::init() )  
  4.     {  
  5.         return false;  
  6.     }  
  7.     __String *s = new __String();  
  8.   
  9.   
  10.     log("%s",s->getCString());  
  11.   
  12.   
  13. … …  
  14.   
  15.   
  16.     return true;  
  17. }  



我们在代码中添加了__String *s = new __String()语句,使用new关键字分配内存,然而直到init函数结束我们都没有使用delete s语句释放它。这样的语句会导致内存泄漏。
首先启动Instruments工具,在图对话框中选择Leaks跟踪模板,点击按钮Profile进入如图所示界面。


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


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



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





图所示的第33行代码就是泄漏点程序代码了,我们从中不难发现问题。
如果我们想进一步评估它对于内存的占用情况,可以看看Allocations模板的折线图。从图中看到,各种变量的使用内存占用情况,也可以知道某个时刻的内存占用情况。4号区域是Heap(堆)内存占用情况,因为堆内存需要人为释放,而栈内存不用人为管理。

 

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

 

 

更多内容请关注国内第一本Cocos2d-x 3.2版本图书《Cocos2d-x实战:C++卷》
本书交流讨论网站: http://www.cocoagame.net
更多精彩视频课程请关注智捷课堂Cocos课程: http://v.51work6.com
欢迎加入Cocos2d-x技术讨论群:257760386
欢迎关注智捷iOS课堂微信公共平台



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [cocos 开发 性能优化] 推荐:

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

- - 移动开发 - ITeye博客
Instruments是动态分析工具,它与Xcode集成在一起,可以在Xcode中通过菜单Product→Profile启动. 启动如图所示,Instruments有很多跟踪模板可以动态分析和跟踪内存、CPU和文件系统. 每个跟踪模板都有不同的用途,其中Leaks可以检测内存泄漏点,Allocations跟踪模板可以查看内存的使用情况.

Android开发性能优化简介

- - CSDN博客推荐文章
       随着技术的发展,智能手机硬件配置越来越高,可是它和现在的PC相比,其运算能力,续航能力,存储空间等都还是受到很大的限制,同时用户对手机的体验要求远远高于PC的桌面应用程序. 以上理由,足以需要开发人员更加专心去实现和优化你的代码了. 选择合适的算法和数据结构永远是开发人员最先应该考虑的事情.

用Netty开发中间件:高并发性能优化

- - CSDN博客推荐文章
用Netty开发中间件:高并发性能优化. 最近在写一个后台中间件的原型,主要是做消息的分发和透传. 因为要用Java实现,所以网络通信框架的第一选择当然就是Netty了,使用的是Netty 4版本. Netty果然效率很高,不用做太多努力就能达到一个比较高的tps. 但使用过程中也碰到了一些问题,个人觉得都是比较经典而在网上又不太容易查找到相关资料的问题,所以在此总结一下.

Android应用开发性能优化完全分析

- - CSDN博客推荐文章
其实有点不想写这篇文章的,但是又想写,有些矛盾. 当然了,本文不会就此编辑这么一次,因为技术在发展,工具在强大(写着写着Android Studio 1.4版本都推送了),自己的经验也在增加,所以本文自然不会覆盖所有性能优化及分析;解决的办法就是该文章会长期维护更新,同时在评论区欢迎你关于性能优化点子的探讨.

给网页设计师和前端开发者看的前端性能优化

- - 优设(UISDC)
本文的作者哈利来自英国,是一位22岁的设计师、开发人员,同时也是一名作家和讲师(见下图). 英文原文: Front-end performance for web designers and front-end developers ,编译: oschina. 在这篇长文章中,我将分享个人项目经验,一些关于快速简单且非常有趣的WEB性能知识的点点滴滴,以便使你的行为可以像一个初级的网页设计师和前端开发者;希望对任何想开始学习性能的人,有一定的启迪作用,并使你的前端项目变得超快.

iOS开发那些事--性能优化–内存泄露问题的解决

- - ITeye博客
内存泄漏(Memory Leaks)是当一个对象或变量在使用完成后没有释放掉,这个对象一直占有着这块内存,直到应用停止. 如果这种对象过多内存就会耗尽,其它的应用就无法运行. 这个问题在C++、C和Objective-C的MRR中是比较普遍的问题. 在Objective-C中释放对象的内存是发送release和autorelease消息,它们都是可以将引用计数减1,当为引用计数为0时候,release消息会使对象立刻释放,autorelease消息会使对象放入内存释放池中延迟释放.

开发高性能的MongoDB应用—浅谈MongoDB性能优化 - 吴纹羽

- - 博客园_首页
大数据时代的数据存储,非关系型数据库MongoDB(一).   “如何能让软件拥有更高的性能. ”,我想这是一个大部分开发者都思考过的问题. 性能往往决定了一个软件的质量,如果你开发的是一个互联网产品,那么你的产品性能将更加受到考验,因为你面对的是广大的 互联网用户,他们可不是那么有耐心的. 严重点说,页面的加载速度每增加一秒也许都会使你失去一部分用户,也就是说, 加载速度和用户量是成反比的.

MySQL性能优化

- sun - IT程序员面试网
在笔试面试中,尤其是像百度,淘宝这些数据量非常大,而且用LAMP架构的公司,数据库优化方面就显得特别重要了. 此外,除了数据库索引之外,在LAMP结果如此流行的今天,数据库(尤其是MySQL)性能优化也是海量数据处理的一个热点. 下面就结合自己的经验,聊一聊MySQL数据库优化的几个方面. 首先,在数据库设计的时候,要能够充分的利用索引带来的性能提升,至于如何建立索引,建立什么样的索引,在哪些字段上建立索引,上面已经讲的很清楚了,这里不在赘述.

Hebernate 性能优化

- - 企业架构 - ITeye博客
文章分为十三个小块儿对Hibernate性能优化技巧进行总结性分析,分析如下:. 一、在处理大数据量时,会有大量的数据缓冲保存在Session的一级缓存中,这缓存大太时会严重显示性能,所以在使用Hibernate处理大数 据量的,可以使用session. clear()或者session. evict(Object) 在处理过程中,清除全部的缓存或者清除某个对象.

Hbase 性能优化

- - CSDN博客云计算推荐文章
因 官方Book Performance Tuning部分章节没有按配置项进行索引,不能达到快速查阅的效果. 所以我以配置项驱动,重新整理了原文,并补充一些自己的理解,如有错误,欢迎指正. 默认值:3分钟(180000ms). 说明:RegionServer与Zookeeper间的连接超时时间.