CKAssets 的 CKQuery 很慢
Posted
技术标签:
【中文标题】CKAssets 的 CKQuery 很慢【英文标题】:CKQuery slow with CKAssets 【发布时间】:2016-05-01 15:52:05 【问题描述】:当我获取具有字符串(或其他)字段的记录时,它需要不到 1 秒:
let query = CKQuery(recordType: "Messages", predicate: NSPredicate(format: "TRUEPREDICATE"))
NSLog("Started fetching")
self.publicDb.performQuery(query, inZoneWithID: nil) (records, error) in
NSLog("Finished fetching")
print(records!.count)
但是,当此记录类型包含 CKAsset 时,查询时间会上升到至少 3 秒。当我要加载 100kb 的图像时,这是不可接受的。当我将资产作为参考放入并从那里加载时也是如此。我可以做些什么来加快对包含资产的记录的查询,或者有没有其他方法可以更有效地存储资产?
【问题讨论】:
1) 与纯文本字段相比,资产很大。他们将需要更长的时间。除了使它们变小之外,您无能为力。 2) 使用CKQueryOperation
而不是performQuery
。它速度更快,灵活性更大。
您可以/可以将资产存储在其他地方吗?使用来自不同来源的 API,例如 Dropbox。我也读到,在生产中事情会更快,但最好依靠它。其他解决方案,使用您自己的 http 服务器作为后备存储,或者确实使用链接并且根本不下载它。
【参考方案1】:
使用操作并设置服务质量:
CKQueryOperation *queryOperation = [[CKQueryOperation alloc] initWithQuery:query];
queryOperation.qualityOfService = NSQualityOfServiceUserInitiated;
如果不设置qualityOfService,会得到后台级别,会很慢。
【讨论】:
这是一个很好的答案。最快(但成本最高)的qualityOfService
是NSQualityOfServiceUserInteractive
。以上是关于CKAssets 的 CKQuery 很慢的主要内容,如果未能解决你的问题,请参考以下文章
win10电脑打开此电脑资源管理器任务管理器软件等突然很慢很慢,cup内存磁盘利用率却很低
SAP migo这个事物代码在做操作的时候,多人操作同一个事务代码时很慢很慢,是啥原因?