我如何一次执行上述所有目标以提高速度。
self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[0])
self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[1])
self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[2])
self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[3])
答案 0 :(得分:1)
你所追求的是DispatchQueue concurrentPerform上的课堂功能
例如:
DispatchQueue.concurrentPerform(iterations: msgIDBatches.count) { (index) in
self.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[index])
}
如果您要更新UI并确保passingMsgIdsTofetchMsgss
是线程安全的,那么显然需要小心回调主队列。使用time profiler进行检查也值得一提,这就是性能瓶颈所在。
另一个选项是OperationQueue
,您可以将所有提取添加到队列中并同时执行它们。
答案 1 :(得分:0)
迅速4.1。首先创建并发队列
private let concurrentPhotoQueue = DispatchQueue(label: "App_Name", attributes: .concurrent)
现在将您的工作分配到并发队列
concurrentPhotoQueue.async(flags: .barrier) { [weak self] in
// 1
guard let weakSelf = self else {
return
}
// 2 Perform your task here
weakSelf.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[0])
weakSelf.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[1])
weakSelf.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[2])
weakSelf.passingMsgIdsTofetchMsgss(messageIDs : msgIDBatches[3])
// 3
DispatchQueue.main.async { [weak self] in
// Update your UI here
}
}