Swift 应用仅在为 Xcode 的 Time Profiler 构建时才能正常运行?

Swift app only performing reasonably when built for Xcode's Time Profiler?

我正在开发一个处理大型浮点数组的应用程序,我非常失望地发现 Swift 显然比 Python 慢 10 倍 运行ning在我的 iPhone 5. 我想这不可能是真的,但如果我没有在 Time Profiler 中测试应用程序并意识到这可能不是我的算法或 Swift',我会认为这是真的导致问题的实施。

当应用程序是为探查器构建时,它表现得很好:它在极短的时间内完成了处理,这是它应该做的。但通常情况下,如果我点击 Xcode 中的 运行 按钮(播放符号)进行构建和 运行,即使编译器设置为 Fastest,也需要将近 20 秒才能完成。 (代码在构建之间保持不变。)荒谬 慢。

当我在 MacBook Pro 的模拟器中构建和 运行 时,它相当快,但即使 then 它也比构建时慢运行 通过我的小 iPhone 5.

上的时间分析器

当我将以下测试代码放在 AppDelegate 的 application() 函数中时,构建之间的性能差异也存在,所以我认为这不是 GUI/threading 问题或任何问题。在 Objective-C(在我设备上的单独应用程序中)和我的 Mac.

中实现相同的测试代码 运行s 很快
var nums: [Float] = []

for var i = 0; i < 250000; i++ {
    nums.append(Float(i) * 0.001)
}

(这需要大约 20 秒,除非 运行 通过 Time Profiler。)

你们以前有过这样的经历吗?如果你能帮我解决这个问题,我会非常高兴。

您是在调试模式而不是发布模式下构建应用程序。调试模式更容易调试,但发布模式生成代码更快。


在为调试模式构建时,编译器会插入有助于调试器的特殊调试符号。我曾经尝试在发布模式下调试应用程序,但调试器甚至找不到我的变量。发布模式不仅不包含这些符号,而且还可以优化您的应用程序,生成一个更小更快的二进制文件。


以下是在调试和发布模式之间切换的方法:

  • 在 Xcode 的 top-left 角点击您的方案。

  • Select "Edit Scheme..."

  • 单击 "Build Configuration" 下拉菜单。

  • 将构建配置更改为 Release。

  • 重建您的项目。

(我没有在这里提供图像,因为我假设您知道如何重建您的项目。)