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
Swift,Objective-C语言性能对照測试的更多相关文章
- sqlite3树形结构遍历效率对照測试
sqlite3树形结构遍历效率对照測试 一.缘起 项目数据结构:本人从事安防行业,视频监控领域.项目中会遇到监控点位的组织机构划分.暂时划分的巡逻点位等.这些相机点位.连同组织机构,它们在逻辑关系上构 ...
- sqlite性能简单測试
主要測试sqlite在大数据量下的插入及查询性能: 測试环境:Centos6.4 1G内存 单核 数据量 大小 索引字段检索(耗时) 非索引字段检索(耗时) 总插入时间 10W 19M 0.001 ...
- 海量数据插入数据库效率对照測试 ---ADO.NET下SqlBulkCopy()对照LINQ 下InsertAllOnSubmit()
摘要:使用.NET相关技术向数据库中插入海量数据是经常使用操作.本文对照ADO.NET和LINQ两种技术.分别使用SqlBulkCopy()和InsertAllOnSubmit()方法进行操作. 得出 ...
- Mali GPU OpenGL ES 应用性能优化--測试+定位+优化流程
1. 使用DS-5 Streamline定位瓶颈 DS-5 Streamline要求GPU驱动启用性能測试,在Mali GPU驱动中激活性能測试对性能影响微不足道. 1.1 DS-5 Streamli ...
- 香蕉派路由功Openwrt、Android功耗对照測试
路由这个东西是要长期通电使用的,所以功耗也是须要关注的.如今香蕉派路由已经有了openwrt和android两个 系统,这两个系统的功耗是否一样呢? 測试工具:QUIGG的德国产功耗測试仪一个.手机充 ...
- 安卓系统底层C语言算法之測试參数是几个long型的算法
#include <stdio.h> #define BITS_PER_LONG (sizeof(unsigned long) * 8) //求一个数x是几个long的长度 #define ...
- 回击MLAA:NVIDIA FXAA抗锯齿性能实測、画质对照
PC游戏玩家肯定会对各式各样的AA抗锯齿技术很熟悉,而今天本文的主角就是NVIDIA今年才推出的新型抗锯齿技术"FXAA". FXAA在某种程度上有些类似于AMD之前宣传的MLAA ...
- Android性能測试 一些适用于Android Studio的代码审查和性能測试工具
导言: Android应用在CPU占用,内存消耗方面的性能指标是影响产品质量的重要因素,因为QQ管家,360手机助手等应用都提供直观的内存消耗,流量监控功能,致使用户比以往更加关注软件的性能,并以此进 ...
- android 性能測试iozone篇
一:简单介绍 iozone是一个文件系统的benchmark工具, 用于測试不同的操作系统中文件系统的读写性能, 能够測试下面13种模式 0=write/rewrite 1=read/re-read ...
随机推荐
- 实战:vue项目中导入swiper插件
版本选择 swiper是个常用的插件,现在已经迭代到了第四代:swiper4.常用的版本是swiper3和swiper4,我选择的是swiper3. 安装 安装swiper3的最新版本3.4.2: n ...
- 关于samsung连接BLE设备的一些资料汇总和开发过程一些经验总结
1 忙了这么久,终于有时间把最近几个月弄的东西整理一下,顺便我的开发过程和经历. 被公司分到做一个蓝牙4.0的项目,对这种软硬结合的东西也比较感兴趣,所以很快投入到android蓝牙4.0的项目中来. ...
- C# .net IDE Rider入门
话说史上最强IDE Visual Studio 所向披靡数十载尚无敌手,现在Intellij带着统一IDE界的目标来挑战VS的霸主地位.了解Rider后发现,哎哟亮点多多,还不错哦! Rider是一款 ...
- cocos2d-x学习笔记(18)--游戏打包(windows平台)
cocos2d-x学习笔记(18)--游戏打包(windows平台) 之前做好的游戏,都是在vs2008下编译执行的.假设说想把游戏公布到网上或者和其它人一起分享游戏,那就得对游戏 ...
- 使用excel进行数据挖掘(6)---- 预測
在配置环境后,能够使用excel进行数据挖掘. 环境配置问题可參阅: http://blog.csdn.net/xinxing__8185/article/details/46445435 例子 DM ...
- Android语音播报、后台播报、语音识别
Android语音播报.后台播报.语音识别 本文介绍使用讯飞语音实现语音播报.语音识别功能. 讯飞开放平台:http://www.xfyun.cn/index.php/default/index 程序 ...
- 剑指offer_面试题_从上往下打印二叉树
题目:从上往下打印出二叉树的每一个结点.同一层的结点依照从左到右的顺序打印.比如输入图4.5中的二叉树.则依次打印出8.6.10.5.7.9.11. 8 / \ 6 10 / \ ...
- Visual C++文件后缀名释义
[1] .APS:存放二进制资源的资源辅助中间文件(可加快资源装载速度). [2] .BMP:位图资源文件. [3] .BSC:浏览信息文件.由浏览信息维护工具(BSCMAKE)从原始浏览信息文件(. ...
- UVA 11077 Find the Permutations 递推置换
Find the Permutations Sorting is one of the most used operations in real ...
- kentico api
http://devnet.kentico.com/docs/10_0/api/html/R_Project_Kentico_API.htm ScriptHelper.RegisterClientSc ...