2017-02-21 55 views
0

我在我的核心數據實體中插入記錄。 隨着記錄增加其插入記錄的時間。在coredata中插入記錄需要多長時間?

當我的實體有大約10000條記錄時,我有6秒鐘的日誌來插入100條記錄(for循環一個接一個地插入)。

我在做的是插入時檢查,如果該記錄已經存在,那麼我正在更新該記錄,否則插入。

循環的每次迭代都具有14個關係表的信息。

所以這可以嗎?或6秒更多?

+0

您可能正在使用不同的上下文來編寫和閱讀,並採用錯誤的方法來合併上下文之間的更改。郵政編碼有機會解決這個問題。 – shallowThought

回答

1

不,它太長了。你做錯了。但有更好的方法!對您想要先插入的所有記錄執行一次抓取抓取。然後通過查找鍵將它們存儲在字典中,您確定它是唯一的(可能是某種類型的ID)。然後,不要爲每個插入操作執行一次提取操作,而只需檢查字典。如果您有很多關係,並且在您的創建和/或更新方法中進行提取(以確保唯一性),則提取量可能會很快失去控制。你可以通過傳遞你的查找字典來解決這個問題,這樣就不需要做更多的提取。當然,你必須小心,不要將這些字典傳遞給線程,這些線程與執行獲取的managedObjectContext無關。

+0

hmm,是調試代碼來識別哪部分代碼需要時間 –

+0

2017-02-20 19:10:27.254 CFBundleDisplayName [41438:1981146]插入記錄 2017-02-20 19:10:3​​4.807 CFBundleDisplayName [41438: 1981146] DB已更新 –