我正在将数据从iTunes写入Core Data。
现在,第一次同步大约需要10秒钟 但是,更新数据大约需要30秒 我的电脑有一个SSD,所以它最有可能在硬盘上更慢。
我正在做的是,我正在收集一系列歌曲,我必须为每首歌曲取一个内容以检查它是否已经存在于Core Data中,如果没有,我必须插入它。
知道某首歌是否已存在的唯一方法是检查persistentID
它基本上是用于识别的持久唯一ID。
我可以通过检查
来查看是否已添加歌曲[NSPredicate predicateWithFormat:@"persistentID == %@", song.persistentID];
不是一个非常聪明的想法。
你有什么建议可以加快我的速度?
答案 0 :(得分:2)
首先,获取您要比较的所有歌曲的ID。然后,您只需前往持久性商店即可获得新歌。
获取ID,
NSArray *allIDs = [existingSongs valueForKeyPath:@"persistentID"];
然后使用这样的谓词进行提取。
[NSPredicate predicateWithFormat:@"persistentID NOT IN %@", allIDs];
答案 1 :(得分:1)
第一次同步总是很短,因为它不会做任何获取请求。
核心数据喜欢: 批量请求 小批量
对于批量请求,Mundi已经完美地回答了这个问题。这个较小的集合将只是您需要更新的集合。
下一部分是指较小的批次。如果使用多线程分解,可以极大地加快更新速度。由于您正在保存并且我对数据集了解不多,请查看multi threaded core data tutorial on cimg。