原文发表于踏得网

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. AT1145 ホリドッグ

    洛谷的题解区里竟然没有O(1)做法详解-- 题面就是要判断\(1+2+\dots+n\)是不是素数 很容易让人想到上面的式子事实上等于\(n(n+1)/2\) 根据质数的定义,质数只能被1和自身整除 ...

  2. 原生JS中 callback,promise,generator,async-await 的简介

    callback,promise,generator,async-await 的简介 javascript异步的发展历程. ES6 以前: 回调函数(callback):nodejs express ...

  3. MyBatis学习总结(18)——MyBatis与Hibernate区别

    也用了这么久的Hibernate和MyBatis了,一直打算做一个总结,就他们之间的优缺点说说我自己的理解: 首先,Hibernate是一个ORM的持久层框架,它使用对象和我们的数据库建立关系,在Hi ...

  4. 极路由设置共享磁盘密码、跨网访问samba服务

    极路由插上移动硬盘后会自动建立samba服务器,但我们没法去配置哪些盘符需要密码,这样只要在同一个wifi下的电脑都能去访问这些东西了,比较弱智.另外我还想再公司中去读写这个移动硬盘. 设置密码 首先 ...

  5. HDU 1709

    MB,一开始就想到是不是只要加上一个不选择砝码的情况,但一直没动手做,因为看了看网上了,觉得总有点复杂,认为自己想错了.... 相信自己 #include <iostream> #incl ...

  6. 安卓中经常使用控件遇到问题解决方法(持续更新和发现篇幅)(在textview上加一条线、待续)

    TextView设置最多显示30个字符.超过部分显示...(省略号),有人说分别设置TextView的android:signature="true",而且设置android:el ...

  7. Educational Codeforces Round 6 A. Professor GukiZ's Robot 水

    A. Professor GukiZ's Robot   Professor GukiZ makes a new robot. The robot are in the point with coor ...

  8. 如何获取Assets的路径

    有两种方法可以获取assets的绝对路径: 第一种方法: String path = file:///android_asset/文件名; 第二种方法: InputStream abpath = ge ...

  9. Redis-2-对于key的通用操作

    Redis-2-对于key的通用操作 标签(空格分隔): redis del key key1 key2 作用: 删除1个或多个键 返回值: 不存在的key忽略掉,返回真正删除的key的数量 rena ...

  10. Pcap 数据报解析

    最近看了一下网络的书,信息系统也有实验任务,所以就学习了一下pcap包的解析. 主要是对内部以太网帧头,ip头部,tcp头部或者udp头部的解析.我因为用访问google.cn作为的样例,没有udp包 ...