1. 程式人生 > >Swift,Objective-C語言性能對照測試

Swift,Objective-C語言性能對照測試

popu ref span ngs htm post 沒有 接受 string

原文發表於踏得網

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

Swift,Objective-C語言性能對照測試