ios – Swift vs Objective-C斐波那契序列速度比较

ios – Swift vs Objective-C斐波那契序列速度比较,第1张

概述我有个问题.我想知道哪一个确实更快( Swift或Objective-C),因为当我开始开发应用程序时,我想选择一个更快/更好的.据许多消息来源(例如苹果的WWDC或 http://www.jessesquires.com/apples-to-apples-part-two/),Swift假设要更快. 我刚刚在Swift和Objective-C中写了一个简单的递归斐波纳契序列程序. 然而,当我在模 我有个问题.我想知道哪一个确实更快( Swift或Objective-C),因为当我开始开发应用程序时,我想选择一个更快/更好的.据许多消息来源(例如苹果的WWDC或 http://www.jessesquires.com/apples-to-apples-part-two/),Swift假设要更快.

我刚刚在Swift和Objective-C中写了一个简单的递归斐波纳契序列程序.

然而,当我在模拟器上运行fib(35)时,我会获得令人惊讶的结果:

目标C结果:

::: fib :::: 9227465 ::: duration ::: 0.122813秒

快速结果

::: fib :::: 9227465 ::: duration ::: 0.606831073760986秒

现在,我甚至在所有Swift编译器优化级别(用于调试)中运行Swift版本,它是None,Fastest,Fastest-Unchecked.我也玩代码生成优化级别为无,快速….最快的进取优化.
然而,所有Swift的结果都接近0.6毫秒

现在我可以想到的最后一件事可能是,我正在将苹果与橙子进行比较?
你们看到我在这里失踪的东西吗?除了Swfit编译器和Apple LLVM代码生成的优化级别之外,还有什么其他功能可以使Swift程序运行得更快吗?

任何建议或意见欢迎和赞赏! ^^!

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)");
解决方法 在决定两种编程语言中哪一种更快时,需要考虑的很多事情.我在Swift和Objective-C之间做了几个基准( https://github.com/vsco/swift-benchmarks),我发现在某些情况下,Swift更快,在其他情况下,Objective-C更快.例如,如果您需要对大量数据进行 *** 作,则在Swift中使用结构对象将提供巨大的性能提升.相比之下,使用非Swift对象,Swift显着慢于Objective-C对等体.

此外,您如何使用Swift中的某些功能对于执行效果至关重要.以此功能为例:

class func shuffleGenericObjects<T>(inout array:[T]) {    for (var i = 0; i < array.count; i++) {        let currentObject: T = array[i]        let randomIndex = Int(arc4random()) % array.count        let randomObject: T = array[randomIndex]        array[i] = randomObject;        array[randomIndex] = currentObject    }}

当然,它可以很好的减少重复的代码,但是当我执行这个方法超过100万Int对象,大概需要32秒完成.反对非通用实现,只有0.181秒.

我还建议不要在Swift中使用NSDate函数进行基准测试.我遇到了一些导致NSDate返回错误时间的错误.将您的基准测试放在XCTestCase中并使用measureBlock()函数要好得多.

总结

以上是内存溢出为你收集整理的ios – Swift vs Objective-C斐波那契序列速度比较全部内容,希望文章能够帮你解决ios – Swift vs Objective-C斐波那契序列速度比较所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1110348.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存