我正在处理一个处理大型浮点数组的应用程序,我非常失望地发现在我的iPhone 5上运行时,Swift显然比Python慢10倍。我想这不可能是的,但如果我没有在时间分析器中测试应用程序并且意识到它可能不是我的算法或Swift的实现导致问题,我会认为这是真的。
当为探查器构建应用程序时,它可以很好地执行:它会在不知不觉中花费很少的时间进行处理。但通常情况下,如果我在Xcode中点击运行按钮(播放符号)进行构建和运行,即使编译器设置为Fastest,也需要将近20秒才能完成。 (代码在构建之间保持不变。)它可笑地慢。
当我在MacBook Pro上的模拟器中构建和运行时,它的速度相当快,但即使那么它比构建和运行Time Profiler时慢得多在我的小iPhone 5上。
当我将以下测试代码放在AppDelegate的application()函数中时,构建之间的性能差异也存在,因此我不认为它是GUI /线程问题或任何事情。当在Objective-C(在我的设备上的一个单独的应用程序中)和我的Mac上的Python中实现时,相同的测试代码会快速运行。
var nums: [Float] = []
for var i = 0; i < 250000; i++ {
nums.append(Float(i) * 0.001)
}
(除非通过Time Profiler运行,否则大约需要20秒。)
你们之前有没有经历过这样的事情?如果你能帮我解决这个问题,我会非常高兴。
答案 0 :(得分:7)
您正在以调试模式而不是发布模式构建应用程序。调试模式更容易调试,但发布模式生成更快的代码。
构建调试模式时,编译器会插入有助于调试器的特殊调试符号。我曾尝试在发布模式下调试应用程序,调试器甚至找不到我的变量。发布模式不仅不包含这些符号,还会优化您的应用,生成 更小更快的二进制文件。
以下是如何在调试和发布模式之间切换:
(我这里没有提供图片,因为我假设您知道如何重建项目。)