【发布时间】:2015-01-27 00:16:02
【问题描述】:
我有问题。我想知道哪个确实更快(Swift 或 Objective-C),因为我想在开始开发应用程序时选择一个更快/更好的。根据许多消息来源(例如 Apple 的 WWDC,或 http://www.jessesquires.com/apples-to-apples-part-two/),Swift 应该更快。
我刚刚用 Swift 和 Objective-C 编写了一个简单的递归斐波那契序列程序。
但是,当我在模拟器上运行 fib(35) 时,我得到了令人惊讶的结果:
Objective-C 结果:
:::fib::::9227465:::duration:::0.122813 秒
Swift 结果
:::fib::::9227465 :::duration:::0.606831073760986 秒
现在,我什至在所有 Swift 编译器优化级别(用于调试)中运行了 Swift 版本,即无、最快、最快未选中。我还将代码生成优化级别设置为无,快速....最快的积极优化。 然而,所有 Swift 结果都接近 0.6 毫秒
现在我能想到的最后一件事可能是,我正在将苹果与橙子进行比较? 你们看到我在这里想念的东西了吗?还有什么我必须打开的(除了 Swfit 编译器和 Apple LLVM 代码生成的优化级别)以使 Swift 程序运行得更快吗?
欢迎和感谢任何建议或 cmets ! ^^!
Objective-C 版本
-(int)fib:(int)num{
if (num == 0) {
return 0;
}
if (num == 1) {
return 1;
}
return [self fib:num - 1] + [self fib:num - 2];
}
Swift 版本
func fib(num: Int) -> Int{
if(num == 0){
return 0;
}
if(num == 1){
return 1;
}
return fib(num - 1) + fib(num - 2);
}
Objective-C 时间测量
NSTimeInterval start = [[NSDate date] timeIntervalSince1970];
int result = [self fib:35];
NSTimeInterval end = [[NSDate date] timeIntervalSince1970];
NSTimeInterval duration = end - start;
NSLog(@":::fib::::%d:::duration:::%f",result,duration);
快速时间测量
var start = NSDate().timeIntervalSince1970;
let result = fib(35);
var end = NSDate().timeIntervalSince1970;
var duration = end - start;
println(":::fib::::\(result) :::duration:::\(duration)");
【问题讨论】:
-
你如何测量时间?
-
@BryanChen 我刚刚用时间测量代码更新了这个问题,我在 Swift 和 Objective-C 中都使用 NSDate
-
NSDate 不适合基准测试。并且 >1 ms 太小了,您最好重复测试多次,这样它们都至少需要一秒钟才能运行。此外,您的代码只会显示动态调度与静态调度之间的区别。
-
(除此之外,您的方法:3,作为参数,给出 2;5 给出 5;8 给出 21。您应该得到的结果的解释是什么?)
-
@BryanChen 实际上,我在 Swift 和 Objective-C 上分别重复了超过 15 次实验,我得到了相似的结果。
标签: ios objective-c xcode swift