1

我正在将数据从 iTunes 写入核心数据。

现在,第一次同步大约需要 10 秒,
但是更新数据大约需要 30 秒。
我的电脑有一个 SSD,所以它很可能在 HDD 上更慢。

我正在做的是,我得到了一系列歌曲,我必须为每首歌曲进行一次提取,以检查它是否已经在 Core Data 中,如果没有,我必须插入它。

知道歌曲是否已经存在的唯一方法是检查persistentID.
它基本上是一个用于识别的持久唯一 ID。

我可以通过检查来查看歌曲是否已经添加

[NSPredicate predicateWithFormat:@"persistentID == %@", song.persistentID];

不是一个非常聪明的主意。

你能给我什么建议来加快这个速度?

4

2 回答 2

2

首先,获取要比较的所有歌曲的 ID。然后,您只需前往持久性商店即可获得新歌曲。

获取ID,

NSArray *allIDs = [existingSongs valueForKeyPath:@"persistentID"];

然后使用这样的谓词进行提取。

[NSPredicate predicateWithFormat:@"persistentID NOT IN %@", allIDs];
于 2013-01-16T16:54:06.057 回答
1

第一次同步总是很短,因为它不会执行任何获取请求。

核心数据喜欢: 批量请求 小批量

对于批量请求,Mundi 完美地回答了这个问题。这个较小的集合将仅是您需要更新的集合。

下一部分是指较小的批次。如果你用多线程分解它,你可以极大地加快更新速度。由于您正在保存并且我对数据集知之甚少,请查看cimg 上的多线程核心数据教程

于 2013-01-16T20:49:02.207 回答