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 ...
随机推荐
- Redis:基础知识及其常用数据类型和关键字
Redis: Redis是什么: REmote DIctionary Server(远程字典服务器) 是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(Key-Value)分布式内存数 ...
- C/C++ 浮点数比较问题
本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50255623 Never try to ...
- POJ 2773
不经意看见dis后的“mod”一词后,瞬间有了思路,点进去看,却发现别人想的和我的不一样——! 我是这样想的,利用的是剩余系+欧几里德带余除法的性质. 若两者GCD=1,则必有除数和余数GCD=1.于 ...
- [Python Test] Use pytest fixtures to reduce duplicated code across unit tests
In this lesson, you will learn how to implement pytest fixtures. Many unit tests have the same resou ...
- JavaFX学习之道:JavaFX之TableView
TableView表 TableColumn列 构建一个表主要有TableView,TableColumn,ObservableList,Bean. 加入列table.getColumns ...
- Sping框架中的注解详解
传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件 ...
- C++ STL 源代码学习(之deque篇)
stl_deque.h /** Class invariants: * For any nonsingular iterator i: * i.node is the address of an el ...
- hdoj--2180--时钟(数学)
时钟 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submiss ...
- Scala语言
一.Scala概述 Scala简介 Scala是一种针对JVM将函数和面向对象技术组合在一起的编程语言.所以Scala必须要有JVM才能运行,和Python一样,Scala也是可以面向对象和面向函数的 ...
- Oracle 10g RAC (linux) ASM 共享存储的管理详解
---------ASM 的管理(共享磁盘的管理)1.以 instance 的方式管理 ASM,启动 database 之前必须先启动 ASM instance,ASM instance 启动后,挂载 ...