我有一个Swift应用程序,以下for循环需要大约一秒钟才能完成。有没有办法改善表现?我可以使用3种for
方法替换filter
循环,但我怀疑它会有所帮助。
// metrics.count == 10000
var metricsByStatus: Dictionary<String, Array<HKQuantitySample>> = ["low": [], "high": [], "normal": []]
// HKQuantitySample.status:
func status(low: Double, high: Double) -> String {
if value < low {
return "low"
} else if value > high {
return "high"
} else {
return "normal"
}
}
// This is taking 1 second, 100% CPU
for metric in metrics {
metricsByStatus[metric.status(low: limits["low"], high: limits["high"])].append(metric)
}
答案 0 :(得分:0)
用枚举值替换“低”,“中”,“高”。
在循环之前提取限制[低],限制[高]一次。
配置现有代码。你会发现它花费大部分时间来比较字符串。
仅测量发布版本中的性能,而不是调试版本。
我发现[String: [HKQuantitySample]]
比Dictionary<String, Array<HKQuantitySample>>
更具可读性。