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

原文发表于踏得网

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

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

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

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

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

可能的一个解释是Swift使用类classes,总在运行ARCAuto 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

posted @ 2017-06-06 21:35  yfceshi  阅读(468)  评论(0编辑  收藏  举报