我只是比较性能Swift https://en.wikipedia.org/wiki/Swift_%28Apple_programming_language%29 and Objective-C http://en.wikipedia.org/wiki/Objective-C。为此,我使用 NSDate 来测量所花费的时间,但我发现 Swift 和 Objective-C 之间存在很大差异。我刚刚跑了一个空for
循环100,000次。这是我的代码,
在 Objective-C 中,
NSDate * start = [NSDate date];
for (int i=0; i<=100000; i++) {
}
NSDate * end = [NSDate date];
double timeTaken = [end timeIntervalSinceDate:start] * 1000;
所用时间为 0.24 毫秒
在斯威夫特中,
var start = NSDate()
for i in 0...100000
{
}
var end = NSDate()
var timeTaken = end.timeIntervalSinceDate(start) * 1000
timeTaken
Swift 中为 74 毫秒,与 Objective-C 相比有很大差异。
我在测量中做错了什么吗?
你所做的纯粹是无稽之谈。该循环的性能如何并不重要,因为它不会在实际代码中发生。本质区别在于,在 Swift 中,循环将在每一步进行溢出检查,这是语言定义所必需的副作用。在 Objective-C 中,情况并非如此。
至少你需要编写真正有意义的代码。
我已经做了一些real测试,结果是: 1. Swift 和普通 C 的低级操作速度相当。 2.当发生溢出时,Swift会杀死程序,这样你就可以注意到溢出,而C和Objective-C会默默地给你无意义的结果。尝试这个:
var i: Int = 0
var s: Double = 0.0
for (i in 1 .. 10_000_000_000) { s += Double (i * i) }
斯威夫特会崩溃。 (任何认为这很糟糕的人都对编程一无所知)。在 Objective-C 中同样的事情会产生无意义的结果。将循环替换为
for (i in 1 .. 10_000_000_000) { s += Double (i) * Double (i) }
并且两者的运行速度相当。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)