原文发表于踏得网

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

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

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

    sqlite3树形结构遍历效率对照測试 一.缘起 项目数据结构:本人从事安防行业,视频监控领域.项目中会遇到监控点位的组织机构划分.暂时划分的巡逻点位等.这些相机点位.连同组织机构,它们在逻辑关系上构 ...

  2. sqlite性能简单測试

    主要測试sqlite在大数据量下的插入及查询性能: 測试环境:Centos6.4  1G内存  单核 数据量 大小 索引字段检索(耗时) 非索引字段检索(耗时) 总插入时间 10W 19M 0.001 ...

  3. 海量数据插入数据库效率对照測试 ---ADO.NET下SqlBulkCopy()对照LINQ 下InsertAllOnSubmit()

    摘要:使用.NET相关技术向数据库中插入海量数据是经常使用操作.本文对照ADO.NET和LINQ两种技术.分别使用SqlBulkCopy()和InsertAllOnSubmit()方法进行操作. 得出 ...

  4. Mali GPU OpenGL ES 应用性能优化--測试+定位+优化流程

    1. 使用DS-5 Streamline定位瓶颈 DS-5 Streamline要求GPU驱动启用性能測试,在Mali GPU驱动中激活性能測试对性能影响微不足道. 1.1 DS-5 Streamli ...

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

    路由这个东西是要长期通电使用的,所以功耗也是须要关注的.如今香蕉派路由已经有了openwrt和android两个 系统,这两个系统的功耗是否一样呢? 測试工具:QUIGG的德国产功耗測试仪一个.手机充 ...

  6. 安卓系统底层C语言算法之測试參数是几个long型的算法

    #include <stdio.h> #define BITS_PER_LONG (sizeof(unsigned long) * 8) //求一个数x是几个long的长度 #define ...

  7. 回击MLAA:NVIDIA FXAA抗锯齿性能实測、画质对照

    PC游戏玩家肯定会对各式各样的AA抗锯齿技术很熟悉,而今天本文的主角就是NVIDIA今年才推出的新型抗锯齿技术"FXAA". FXAA在某种程度上有些类似于AMD之前宣传的MLAA ...

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

    导言: Android应用在CPU占用,内存消耗方面的性能指标是影响产品质量的重要因素,因为QQ管家,360手机助手等应用都提供直观的内存消耗,流量监控功能,致使用户比以往更加关注软件的性能,并以此进 ...

  9. android 性能測试iozone篇

    一:简单介绍 iozone是一个文件系统的benchmark工具, 用于測试不同的操作系统中文件系统的读写性能, 能够測试下面13种模式 0=write/rewrite 1=read/re-read ...

随机推荐

  1. 20121124.Nodejs创建HTTP程序.md

    ####1.源代码: var http=require('http');//读取http模块    http.createServer(function(req,res){//创建一个服务,接受一个回 ...

  2. Opencv 视频转为图像序列

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50283303 基于OpenCV的视频转 ...

  3. servlet调用的几种方式

    參见 文库/java/javaEE全新学习教程2.2节 1.通过URL调用 2通过提交表单 3超链接 4 javascript写一个函数,调用这个函数 1,首先在project的WebRoot目录下建 ...

  4. JDBC连接mysql增删改查整体代码

    第一种比较low:用了statment,没有用preparedstatement.另外,插入时,不灵活,不能调用参数,但是如果直接给函数形参的话就会被SQL注入攻击,所以,最好在sql语句中使用?代表 ...

  5. Spring25大面试题

    1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发人员攻克了开发中基础性的问题 ...

  6. CDOJ 876 爱管闲事 DP

    爱管闲事 春希非常爱管闲事,他每天都会抽空帮助一些同学,由于春希非常死板,出于公平性,春希不会先帮助后来找他的同学. 现在有n个同学需要他的帮助,虽然他很想一天之类帮助所有人,但毕竟精力有限,于是他决 ...

  7. 修改YOLO使其显示自定义类别

    基本参考自这篇文章(http://blog.csdn.net/ma3252788/article/details/74659230),主要用来记录下自己遇到的问题 根据@赤战约风 的帖子做如下修改可以 ...

  8. select into in mysql

    http://stackoverflow.com/questions/16809393/select-into-in-mysql Use the CREATE TABLE SELECT syntax. ...

  9. ie浏览器检测不到cookie的问题

    之前做项目由于客户的要求设置缓存必须由后台来设置必须使用cookie(session是没问题的),后期设置时出现了登录页面与首页来还跳转的局面.原因就是首页没检测到登录后的缓存,而后台验证到确实已经是 ...

  10. 项目结合activiti工作流框架使用

    项目结合activiti工作流框架使用: 1.项目与工作流框架的结合. 2.状态:草稿(待审批).审批中.审批通过.审批失败 3. 提交审批: 0 草稿(待审批),记录绑定工作流执行id,审批状态设置 ...