iOS CloudKit 在查询繁重的 CKAsset 时速度很慢(即使有 QoS)
iOS CloudKit is slow on querying heavy CKAsset (even with QoS)
我正在使用 CloudKit 下载 CoreML(机器学习)模型。它们每个大约 90MB。我有 public 数据库和具有一种自定义 'ML' 记录类型的默认区域。
我通过id查询这个'ML',在completion block上得到响应需要一分多钟(应该是秒的事情)。我试过生产环境,设置服务质量,以及用不同的方式查询相同的结果(非常慢)。
我想知道我是否遗漏了什么,或者是否有任何其他更快地下载 ML 模型的方法?
这是我当前的代码:
let arrayPredicate = NSPredicate(format: "id == %@", id)
let query = CKQuery(recordType: "ML", predicate: arrayPredicate)
let queryOperation = CKQueryOperation(query: query)
queryOperation.qualityOfService = .userInteractive
queryOperation.resultsLimit = 1
queryOperation.recordFetchedBlock = { record in
// This gets called +60 sec after
}
queryOperation.queryCompletionBlock = { record, error in
// Same here
}
publicDB.add(queryOperation)
我切换到 Firebase 存储进行测试,结果稍微快了一点,但也快不了多少。 rmdaddy
和 TommyBs
的思路是对的: CloudKit 可能会慢一点,因为你需要查询记录,但下载速度差不多。
我最终的解决方案是使用 Firebase Storage
,因为它很容易处理下载进度,然后在 UI 上显示,让用户等待。
我正在使用 CloudKit 下载 CoreML(机器学习)模型。它们每个大约 90MB。我有 public 数据库和具有一种自定义 'ML' 记录类型的默认区域。
我通过id查询这个'ML',在completion block上得到响应需要一分多钟(应该是秒的事情)。我试过生产环境,设置服务质量,以及用不同的方式查询相同的结果(非常慢)。
我想知道我是否遗漏了什么,或者是否有任何其他更快地下载 ML 模型的方法?
这是我当前的代码:
let arrayPredicate = NSPredicate(format: "id == %@", id)
let query = CKQuery(recordType: "ML", predicate: arrayPredicate)
let queryOperation = CKQueryOperation(query: query)
queryOperation.qualityOfService = .userInteractive
queryOperation.resultsLimit = 1
queryOperation.recordFetchedBlock = { record in
// This gets called +60 sec after
}
queryOperation.queryCompletionBlock = { record, error in
// Same here
}
publicDB.add(queryOperation)
我切换到 Firebase 存储进行测试,结果稍微快了一点,但也快不了多少。 rmdaddy
和 TommyBs
的思路是对的: CloudKit 可能会慢一点,因为你需要查询记录,但下载速度差不多。
我最终的解决方案是使用 Firebase Storage
,因为它很容易处理下载进度,然后在 UI 上显示,让用户等待。