【发布时间】:2019-07-12 09:00:43
【问题描述】:
假设我有这种功能和 DispatchQueue 逻辑。假设当synchLatest() 被调用时,它会触发"Code Block 1" 两次。
应该是这样的,在循环期间,"Code Block 1" 的执行只是从 grpc 响应中检索字符串和 UserDefaults 中的存储带我 1.7 seconds 和第二次它在循环它需要5 seconds?
let synchQueue = DispatchQueue(label: "com.dmapp.synchQueue", qos: .default, attributes: .concurrent)
let synchProcessQueue = DispatchQueue(label: "com.dmapp.processQueue", qos: .default, attributes: .concurrent)
func synchLatest() {
while(someconditions) {
synchQueue.async {
...
let response = try grpcCall.receive()
...
synchProcessQueue.async {
....
measure("Code Block 1", {
if response.data.nickname != "" {
// Store in UserDefaults
}
})
....
}
}
}
}
@discardableResult
static func measure<A>(name: String = "", _ block: () -> A) -> A {
let startTime = CACurrentMediaTime()
let result = block()
let timeElapsed = CACurrentMediaTime() - startTime
print("Time: \(name) - \(timeElapsed)")
return result
}
我是否以错误的方式测量代码执行时间?
【问题讨论】:
-
看起来你只是在对用户默认值的更新进行基准测试,我不知道为什么会这么慢。话虽如此,您正在对似乎同时运行的任务进行基准测试,所以如果有任何同步正在进行,我预计后者会更慢。
-
谢谢你,这对我的分析也很有意义
标签: swift grand-central-dispatch grpc dispatch-queue