Swift,Objective-C语言性能对照測试

原文发表于踏得网

Swift包括了非常多现代语言特性尤其是从一些脚本语言如Javascript/Ruby中汲取了营养。

此外苹果公布Swift时,使用特别选用的一些样例来宣称Swift性能对于Ojbective C的大幅提升(40~50%),如复杂对象排序,

Apple并未声称Swift APP比Objective-C APP性能优越,通过精心挑选的个例(也许是利用已知的Objective-C语言的缺陷),

却巧妙的留下了总体性能提升的印象。可是开发人员实际測试出来的情况却相反。

开发人员Keith第一时间给出了自己的測试结果,实际数据显示。Swift在简单循环、递增、赋值、数组扩展、字符串拼接上性能远不如Objective C。

可能的一个解释是Swift使用类classes,总在运行ARC(Auto Referrence Count),而Objective C则很多其它使用C风格的数据类型。

详细測试方法、代码和数据引用例如以下:

循环(Loop a million times)
Swift:  0.0036s
Objective-C:  .0021s (1.7x faster)
循环里没有不论什么其它操作。实际上Swift在这里表现不错。由于Objective-C在这个測试用例下就好比一个简单的C语言測试。注意这里的循环方式是x=x+1

自增(Increment)
Swift:  0.024s
Objective-C:  0.0023s (10.4x faster)
奇怪的是Swift ++操作有严重的性能问题,比x=x+1慢6倍。

赋值(Assign)
Swift:  0.024s
Objective-C:  0.0022s (10.9x faster)
这仅仅是一个简单语句 x = y.
大概Swift使用了ARC,保留和释放一百万次显然带来了性能伤害。

加入字符串到数组(Append native string to native array)
Swift:  6.49s
Objective-C:  0.046s (141.1x faster)
Swift代码使用了字符串数组(Array of String).  Objective-C中则是把一个NSString加到一个NSMutableArray中,没有启用优化和其它改造。

而在Objective-C中使用CFMutableArrayRef还会更快,由于非常多情况下,你不须要去保留那个字符串。

加入整数到数组(Append native integer to native array)
Swift:  6.51s
Objective-C:  0.023s (283x faster)
Swift代码使用了整型数组Array of Int.  Objective-C使用了NSNumber和NSMutableArray

拼接字符串(Concatenate two strings)
Swift:  3.47s
Objective-C:  0.27s (21x faster)
Swift内部循环代码:
    theString3 = theString + theString2
Objective-C内部循环代码:
    theString3 = [theString stringByAppendingString:theString2];

兼听则明,Swift还是新生儿。须要接受开发人员的考验。

一个明智的策略也许是对于现有的项目,保持使用Objective C。而对于新项目,尝试性使用Swift,

并让开发团队跟进Swift语言发展状况,随时学习。

很多其它Swift实时资讯可techbrood一下Swift

by iefreer

时间: 2024-11-01 18:05:16

Swift,Objective-C语言性能对照測试的相关文章

sqlite3树形结构遍历效率对照測试

sqlite3树形结构遍历效率对照測试 一.缘起 项目数据结构:本人从事安防行业,视频监控领域.项目中会遇到监控点位的组织机构划分.暂时划分的巡逻点位等.这些相机点位.连同组织机构,它们在逻辑关系上构成了一个树形结构. 又因为不论什么一个点位属于一个组织机构,也可能属于一个被暂时创建的视频巡逻计划中,因此,能够看出,不论什么一个节点,包含相机节点和组织机构节点,都有可能有至少一个父级节点,且不论什么一个组织机构节点也会有多个下级子节点.这中逻辑关系又构成了图. 数据量规模:一个市级别的管理平台,

香蕉派路由功Openwrt、Android功耗对照測试

路由这个东西是要长期通电使用的,所以功耗也是须要关注的.如今香蕉派路由已经有了openwrt和android两个 系统,这两个系统的功耗是否一样呢? 測试工具:QUIGG的德国产功耗測试仪一个.手机充电器一个 香蕉派路由:除网线.调试串口外,没有接不论什么外部设备,当然TF卡不可缺少.没有开启无线 手机充电器自身的功耗: 电流: 功耗: 一.openwrt稳定后的数据: 电流: 功耗: 二.android稳定后的数据: 电流: 功耗: 因为openwrt眼下功能不完好,至少HDMI没有驱动起来,

Android性能測试 一些适用于Android Studio的代码审查和性能測试工具

导言: Android应用在CPU占用,内存消耗方面的性能指标是影响产品质量的重要因素,因为QQ管家,360手机助手等应用都提供直观的内存消耗,流量监控功能,致使用户比以往更加关注软件的性能,并以此进行软件选用的决策. 眼下,已经有非常多能够监控android app 性能的工具能够供开发者使用.如:基于Eclipse插件体系的MAT,其通过生成.hprof文件对内存泄露情况进行排查:内存检測工具APT:提供CPU利用率实时曲线图,方便对照測试内存泄露问题[图0-1] 图 0-1  通过APT实

H264编码器性能測试

版本号:0.1.0-beta 作者:石硕 更新:2014-04-13 15:54:08 ============================================================ 现在.H264已经成为视频行业的标准规范.企业中使用比較多的当数X264,开源,资源消耗又比較少. 首先,介绍一下常见的三大开源H264编码器:JM.X264.T264 JM H264的官方測试源代码,实现了264的全部特性,但程序结构冗长,编码复杂度高,不推荐商业应用. X264 摈弃了

iOS 单元測试之XCTest具体解释(一)

原创blog,转载请注明出处 blog.csdn.net/hello_hwc 欢迎关注我的iOS-SDK具体解释专栏 http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html 前言:測试是一个好的App必不可少的部分.每个App都是由一个个小的功能组合到一起的. 而这些小的功能又是由一个个函数或者说算法组合到一起的.单元測试就是对这些小的功能或者函数进行測试,良好的单元測试会让代码的健壮性提高非常多.XCTest就是XCode为我

Android自己主动化測试解决方式

如今,已经有大量的Android自己主动化測试架构或工具可供我们使用,当中包含:Activity Instrumentation, MonkeyRunner, Robotium, 以及Robolectric.另外LessPainful也提供服务来进行真实设备上的自己主动化測试. Android自身提供了对instrumentation測试的基本支持,当中之中的一个就是位于android.test包内的ActivityInstrumentationTestCase2类,它扩展了JUnit的Test

UIAutomation使用測试入门

自己主动化測试的优点: 1.自己主动化能够自己主动測试,不须要人的干预.同一时候还能够不断地反复某一个动作. 2.自己主动化測试在添加了新的功能之后.还能够回归到原理的功能,使其原来的功能不会受到影响. 缺点:会受到測试系统和project师的制约. 自己主动化測试脚本的执行有可能受到不同层次的限制与制约. 大概就是主要两个方面: 1.系统级别的执行机制,并非全部的程序(中的)代码能够自己主动执行,由于ios中的程序的之间总是存在着一些权限.这个就是要考虑到安全级别的问题.签名 2.应用程序级别

PAAS平台的web应用性能測试与分析

引言 为什么我会写这一篇博客,由于近期非常多京东云擎jae的用户反应一个问题就是他们部署在jae上面的应用訪问非常慢,有极少数应用甚至常常出现504超时现象.当然大家首先想到的是jae性能太差,这也是人之常情,往往出现什么错误的时候首先想到是别人的不好.工作中非常多同事也是这样,假设软件系统出现一个bug首先怀疑的肯定不是自己写的代码.今天花时间写这一篇博客主要就是告诉大家如何确定我们部署在PAAS平台(不不过JAE哦)web应用为什么慢?慢在哪儿了?有什么方法能够解决? 原因分析 出现訪问自己

iOS Sprite Kit最新特性Physics Field虚拟物理场Swift測试

在WWDC2014上,Sprite Kit又有了非常多新的提升! 当中一个非常有意思的东西就是Physics Field!也就是物理场! 这意味着我们在Sprite kit上编写虚拟物理场的游戏将变得非常easy! 这里我依据WWDC2014上What's new in Sprite kit的官方视频上的DEMO, 用Swift语言自己做了一个Demo. 截图例如以下: 先放上GitHub链接: https://github.com/songrotek/PhysicsFieldsWorld.gi