【问题标题】:Calendar.current.date(bySettingHour takes so long to compileCalendar.current.date(bySettingHour 编译时间太长
【发布时间】:2019-09-01 19:19:51
【问题描述】:

我使用Calendar.current.date(bySettingHour 代码来设置特定日期。问题是编译需要很长时间~4 秒

print("Time seconds ",Date().timeIntervalSince1970)
for i in 0..<9999 {
    let nowDate = Calendar.current.date(bySettingHour: 0, minute: 0, second: 0, of: Date())!
}
print("Time seconds ",Date().timeIntervalSince1970)// For loop took 4 seconds

有什么办法可以减少编译时间?

【问题讨论】:

  • 你的意思是编译还是运行需要4秒?
  • @Chris 编译时间。您可以通过在操场上粘贴代码来检查
  • 我没有在当前的 XCode 版本中使用 Playgrounds,但是与我以前使用的 Playgrounds 相比,4 秒对于 Playgrounds 来说是相当快的。
  • 您永远不应该在 Playground 中检查性能,无论是编译时性能还是运行时性能,因为 Playground 不使用优化。
  • 对我来说花了 2 秒.. :)

标签: ios swift nsdate nscalendar


【解决方案1】:

您无法在 Playground 中测试性能,最重要的是无法编译性能。 Playgrounds 做了很多额外的工作以在右侧栏中显示“(9999 次)”。 Playgrounds 也没有真正可以与执行分开的单独“编译”步骤。而且他们不优化代码。您可以在 Playground 中评估性能的任何部分。

当我用 swiftc 编译它时,不到半秒。它在不到一秒的时间内运行。

【讨论】:

  • 我把它放在 xcode 项目中,结果大致相同。请检查一下。
  • 经过测试。编译时间不到一秒钟。您是否将这段代码(加上import Foundation)完全放入了一个没有其他内容的项目中?我通常使用命令行项目来消除所有其他变量。您创建项目的精确度如何,您是否使用当前稳定的 Xcode (10.2)?
  • @RobNaiper 是最新的 xcode。请尝试使用99999 或更多它会变慢。请帮忙
  • @Amit 要编译吗?如果您看到由于更改常量而导致的编译 差异,则说明问题非常严重,您应该发布一个完整的示例来演示它。如果您的意思是 运行 创建 200k Date 对象的代码很慢,其中 100k 需要不平凡的日历计算,然后为每个对象释放内存,这似乎并不令人惊讶。 (同样,我建议在 Mac 命令行应用程序中进行测试。在 Playground 中花费多长时间没有意义。)
  • 我一直在做这种优化工作,很乐意进一步讨论,但这需要处理实际代码,而不是代码之类的东西。性能优化是非常特定于使用的。通常,我是在咨询的基础上而不是在 StackOverflow 中这样做的,因为大多数人无法发布他们的完整项目,而且答案通常对其他人没有帮助。如果您可以将完整的问题简化为一个小的、独立的示例(这样修复它肯定会解决您的全部问题),我很乐意在这里查看它。否则,我很乐意讨论咨询。
猜你喜欢
  • 2015-05-11
  • 2012-06-22
  • 2012-11-12
  • 2017-08-14
  • 1970-01-01
  • 2014-11-25
  • 2022-11-14
  • 2018-05-23
相关资源
最近更新 更多