У меня проблема. Я хочу знать, какой из них действительно быстрее (Swift или Objective-C), потому что я хотел бы выбрать более быстрый/лучший, когда приступаю к разработке приложения. Согласно многим источникам (например, WWDC от Apple, или http://www.jessesquires.com/apples-to-apples-part-two/), Swift, вероятно, будет быстрее.Swift vs Objective-C Сравнение скорости последовательности Fibonacci
Я просто написал простую рекурсивную программу последовательности фибоначчи как для Swift, так и для Objective-C.
Однако, когда я бегу выдумка (35) на тренажере, я получаю удивительные результаты:
Objective-C Результат:
::: выдумка :::: 9227465 ::: Продолжительность ::: 0.122813 секунд
Swift Результат
::: Фибо :::: 9227465 ::: продолжительность ::: 0.606831073760986 секунд
Теперь я даже запустил версию Swift на всем уровне оптимизации Swift Compiler (для Debug), который является None, Fastest, Fastest-Unchecked. Я также играю с уровнем оптимизации генерации кода до None, Fast .... Fastest Aggressive Optimization. Однако все результаты Swift - это что-то близкое к 0,6 миллисекундам.
Теперь последнее, о чем я могу думать, может быть, я сравниваю Apple с Orange? Вы, ребята, видите, что мне не хватает здесь? Есть ли что-нибудь еще, что мне нужно включить (кроме уровней оптимизации для компилятора Swfit & Apple LLVM Code Generation), чтобы заставить программы 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];
}
Свифта версия
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);
Swift Время измерения
var start = NSDate().timeIntervalSince1970;
let result = fib(35);
var end = NSDate().timeIntervalSince1970;
var duration = end - start;
println(":::fib::::\(result) :::duration:::\(duration)");
как вы измеряете время? –
@BryanChen Я только что обновил вопрос с помощью кодов измерения времени, я использую NSDate как для Swift, так и для Objective-C – xiaowoo
NSDate не подходит для теста. и> 1 мс слишком мал, вам лучше повторять тест много раз, чтобы они оба выполняли хотя бы секунду для запуска.Кроме того, ваш код будет показывать только разницу между динамической отправкой и статической отправкой. –