测试我们的程序性能-程序员宅基地

技术标签: 移动开发  xcode  c/c++  

 

在开发iphone程序的时候,如果程序会有较大的开销并且希望运行在配置较低的早期设备上,我们就需要解决一些在设备环境窘迫的时候出现的性能问题,程序性能优化调整上升为一个不可忽视的问题。

接下来介绍一些现有的一些测试工具,来帮助程序员发现热点,优化性能,解决程序bug。并希望以后可以出现的一些测试工具或方案。

一、 现有工具

 

Shark

代码分析程序。帮助分析代码性能,允许配置所有系统文件,方便调试各代码运行时间,以跟踪代码性能。

image

Xcode包含许多性能分析工具,其中有一个叫shark,位于/Develpoer/Applications/Performance Tools下,他最早是用于处理运行mac的程序,现在对于运行在iphone上的程序也有很大帮助。

作为没有mac开发背景的iphone程序员,不了解也是很正常的。即时现有iphone开发书籍也很少有介绍。还有一个原因可能是他的测试方式需要对程序员有更高的要求。程序员通过CPU时钟周期分析出程序的资源消耗热点,定位到代码中的位置。其实到现在我也不会很好的使用这个工具。

image

大致需要以下的步骤来完成测试和分析。

1. 在模拟器中构建运行程序,

2. 切换到shark设置,时间分析或其他方式,选择进程或者其他,选择指定的进程,

3. start,测试过程的操作,

4. stop,查看结果。

image

通过分析,可能是消耗过多的GUI布局,或者是无谓的计算等,最终发现热点用更有效的方法来消除热点

在配置好代码签名的环境,也可以测试和mac相连的ios设备,选择其中相关远程调试选项即可开始,手头没有设备的环境,没有测试。

shark有效但是还是有一定的局限性:它把在他的取样周期中的所有活动同等对待,无法捕捉一小段时间,而这段时间里也许有一些其他的外部事件,做了有趣的事情,会导致其他的结果出现。

Instruments

性能测试工具,收集程序运行数据,帮助分析程序运行。

他的出现解决的shark的不足的地方,Instruments维持一个程序关于时间的活动记录,并把它显示在一条时间线上,可以看到程序在生命周期中活动的响应,程序是如何消耗cpu,内存和其他资源的。很直观的通过图形界面得出了分析结果,程序很容易就可以定位到问题代码的位置。

这是一个iphone开发书籍必备内容,现在主要是用来检查内存泄露,你可以通过网络或其他书籍来了解Instruments其他详细的功能,这里就不在赘述了。或者你也可以直接开始,我相信你很快就可以掌握其使用方式,Instruments对程序员的要求很简单。

image

不过其实各有利弊,Instruments呈现的更多是分析的结果,也许会掩盖一些问题。有时候其实我们也希望通过shark的原始底层数据来更加精确的解决问题所在。

Clang静态分析器

这是一个LLVM的开源项目,更具体的信息可以通过其网站来了解。

静态分析器不是在程序运行时检查代码,它是一个代码静态分析工具,通过自身的技术建模并试图发现那些易于识别的错误。

Clang其实是集成在GCC编译器中的,并不一定需要xcode工具,也可以通过命令行配置来执行。

在xcode中使用非常简单,没错,只需要点击Build and analyze就坐等看结果了。

image

在制作下面这张截图的时候,我发现并解决了工程中的几个内存泄露和删除一些无效分支的死代码。

image

Clang主要可以分析得出以下这些问题

  • 内存泄露
  • Retain和release的正确使用
  • 未初始化的变量
  • 未使用的变量
  • 无法到达的代码路径
  • 引用空指针
  • 除零
  • 死存储(赋值非从未使用的变量)
  • 类型不兼容的oc方法签名
  • 缺少dealloc

在应用程序的生命周期中,有很多的对象被创建,因此要发现一个较长时间内稳定但是泄露缓慢的对象的错误可能是比较困难的。Scan-build能捕捉到这样的引用技术错误。试图写一个已释放的变量会导致崩溃,静态分析器发现可以减少测试人员和用户的痛苦。

静态分析器可以遍历所有可能的路径并发现那些可能的会错过的错误。

Unit test bundle

我们还有单元测试包( Unit test bundle),单元测试其实应该是开发的一部分工作,单很多时候我们并没有这样做。

二、 还需要什么

 

UI Recorder

看看截图中的那些灰色的选项,有一个UI Recorder选项,这是一个已经Mac上存在的测试工具,顾名思义,它是一个类似于windows的Winrunner的自动化测试工具。

image

UI Recorder通过记录一些与GUI的交互操作,通过自动录制、检测和回放用户的应用操作。

  • 发现那些依赖于应用程序使用方式的的性能问题。就算只是通过简单的机械重放,通过可以发现bug的重现规律,可以发现可能需要和用户指定的交互动作才会出现的问题。
  • 可以自动进行需要的压力测试,通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题。
  • 有效地帮助测试人员对复杂应用的不同发布版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的应用无故障发布及长期稳定运行

相信以后有机会能够移植到iOS上的。










本文转自 arthurchen 51CTO博客,原文链接:http://blog.51cto.com/arthurchen/641534,如需转载请自行联系原作者
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33712987/article/details/89987735

智能推荐

使用java随机生成中文姓名_java 随机中文名-程序员宅基地

文章浏览阅读1.3w次,点赞2次,收藏5次。将字符串形式的名字转换为数组形式 private static String names= "碧凡、夏菡、曼香、若烟、半梦、雅绿、冰蓝、灵槐、平安、书翠、翠风、香巧、代云、" + "友巧、听寒、梦柏、醉易、访旋、亦玉、凌萱、访卉、怀亦、笑蓝、春翠、靖柏、书雪、" + "乐枫、念薇、靖雁、寻春、恨山、从寒、忆香、觅波、静曼、凡旋、新波、代真、新蕾、" ..._java 随机中文名

人生随笔 25_25zzj-程序员宅基地

文章浏览阅读707次。一人走在路上,叫做孤单;两人共同上路,叫做友伴。如果他孤单,主动些, 做别人的同伴, 叫做助人;如果你孤单,主动些, 寻觅别人作伴, 叫做助己;如此, 叫做共赢._25zzj

禁用快捷键-程序员宅基地

文章浏览阅读121次。 禁用 F5 document.onkeydown = function (e) { var ev = window.event || e; var code = ev.keyCode || ev.which; if (code == 116) { ev.keyCode ? ev.keyCode = 0 : ev.which ..._关闭ev所有的快捷键

Creo 9.0 如何快速修改CAD坐标系?_creo怎么重新定义坐标中心-程序员宅基地

文章浏览阅读4k次,点赞2次,收藏3次。如果我们拿到一个3D图,打开以后发现工件是歪的,和坐标系不平行,而且位置也不是我们想要的。那么我们怎么快速把它摆正,摆到我们想要的位置。在Creo中重新创建一个坐标系,在创建坐标系时,指定新坐标系(创建基准坐标系)。导出Creo文件时选择“自定义导出”复选框,然后以新建的CS0坐标系作为参考导出文件即可。..._creo怎么重新定义坐标中心

Excel 退出页眉与页脚编辑状态_excel关闭页眉页脚-程序员宅基地

文章浏览阅读954次。123_excel关闭页眉页脚

pyspark.sql.DataFrame_df: pyspark.sql.dataframe = [features: vector, lab-程序员宅基地

文章浏览阅读870次。文章目录pyspark中的dataframe的官方定义为:分布式数据集合,其等效于Spark SQL中的关系表,可以使用SparkSession中的各种函数来创建。_df: pyspark.sql.dataframe = [features: vector, label: string]

随便推点

TP6框架--EasyAdmin学习笔记:列表调用搜索,开发常见问题记录-程序员宅基地

文章浏览阅读1.8k次。这是我写的学习EasyAdmin的第五章,这一章我给大家分享下列表调用搜索的相关知识,并记录说明下开发时碰到的常见问题首先说明下如何在页面中调用layui的搜索,效果如下:代码如下:define(["jquery", "easy-admin"], function ($, ea) { var init = { table_elem: '#currentTab..._easyadmin的列表也怎么查询一段价格之间

MySQL(InnoDB剖析):13---文件之(InnoDB存储引擎文件:表空间文件(.ibd)、重做日志文件(redo log))_mysql 表空间 文件-程序员宅基地

文章浏览阅读1.2k次。前面介绍的文件都是MySQL数据库本身的文件,和存储引擎无关。本文介绍与存储引擎有关的独有的文件。本文将介绍与InnoDB密切相关的文件,这些文件包括重做日志文件、表空间文件一、表空间文件功能:InnoDB采用将存储的数据按表空间(tablespace)进行存放的设计 在默认配置下会有一个初始大小为10MB,名为idbata1的文件(见下图),该文件就是默认的表空间文件 表空间结构介绍参......_mysql 表空间 文件

企业支出无票,成本高,通过灵活用工如何解决?_灵活用工平台无票支出的原理-程序员宅基地

文章浏览阅读351次。近年来,企业间竞争加剧、资本寒冬、产能过剩等现象的出现,都导致了一个共同的结果:成本升高。企业经营规模扩大时,会发现人不够用了,企业需要节省成本,这就必然会导致用人模式的变化。原本是一家企业大量雇佣全职,负担大量成本。但在未来,很多岗位都会演变成多家企业共享一个人才,一个人服务多家企业。人力资源的共享经济会发展起来,这也正是灵活用工的核心逻辑。灵活用工也是减税降费的好形式,税率低适用行业广,比如直播平台/房地产经纪/社交电商/网约车平台/共享经济/传媒公司/外卖平台/k12教育平台/医疗平台/物流平_灵活用工平台无票支出的原理

Android Studio 荣耀手机adb连接不上_honer60怎么进行adb连接-程序员宅基地

文章浏览阅读6.8k次,点赞8次,收藏14次。荣耀手机:HONOR 60打开开发人员选项,打开USB调试模式,打开“仅充电“模式下允许ADB调试这几个选项之后,Android Studio的logcat中依然识别不到设备的话,可以尝试如下三步设置:一、拨打电话输入:*#*#2846579#*#*,进入工程菜单;二、选择 <后台设置>;三、选择 <USB端口设置>,在弹窗中选择 生产模式 (默认是Hisuite模式);..._honer60怎么进行adb连接

如何获取当前页面的URL地址_怎么获取当前页面的网址-程序员宅基地

文章浏览阅读1.4k次。const currentURL = () => window.location.href// 事例currentURL() // 'https://google.com'_怎么获取当前页面的网址

%s %*s %*.*s_%*s和%s-程序员宅基地

文章浏览阅读668次。%s %*s%*.*s_%*s和%s