自己做iOS開發,以后慢慢都要轉swift,前段時間看到網上的一個帖子,說swift的運行效率奇低,覺得自己有必要驗證一下。
我用了一個最簡單的加法運算,從0加到10000000,看三種語言的時耗。
swift 2.2:
import Foundation let start = CFAbsoluteTimeGetCurrent() var sum = 0 for i in 0...10000000{ sum += i; } print("swift") print(sum) print(String(CFAbsoluteTimeGetCurrent() - start) + "s")
運行結果:
Objective-C 2.0:
1 #import <Foundation/Foundation.h> 2 3 int main(int argc, const char * argv[]) { 4 @autoreleasepool { 5 NSInteger sum = 0; 6 CFTimeInterval start = CFAbsoluteTimeGetCurrent(); 7 for (int i = 0; i <= 10000000; i++) { 8 sum += i; 9 } 10 CFTimeInterval end = CFAbsoluteTimeGetCurrent(); 11 CFTimeInterval dur = end - start; 12 printf("Objective-C sum=%ld\n",sum); 13 printf("dur:%f s\n",dur); 14 15 } 16 return 0; 17 }
運行結果:
C++ 11:
1 int main(int argc, const char * argv[]) { 2 chrono::system_clock::time_point startTime = chrono::system_clock::now(); 3 long sum = 0; 4 for (int i = 0; i < 10000000; i++) { 5 sum += i; 6 } 7 chrono::system_clock::time_point endTime = chrono::system_clock::now(); 8 cout << "C++ sum: " << sum << endl; 9 cout << "duration: " <<(endTime - startTime).count()*1.0/CLOCKS_PER_SEC << "s" << endl; 10 return 0; 11 }
運行結果:
運行結果可以發現:C++的效率比Objective-C 和 swift 的效率要高,C++ 只比 Objective-C 稍高一點,且二者的精度都比swift的低,要那么高精度有什么用,不知道蘋果的用意。CFAbsoluteTimeGetCurrent,函數的內部設置導致的把,是double類型的。C++運行速度是swift運行的兩倍,運行結果會和硬件也有關系,如CPU主頻等。當然swift還在持續改進,swifter們不要太頭大。持續關注吧。