2015-01-03 30 views
0

我無法將(〜250k)字(它們在數組內)作爲對象存儲到Core Data中。它需要永遠。這是我使用的快速列舉這樣做,一旦我已經創建了一個數組用我所有的話:魔法記錄/核心數據:保存許多對象(〜250K)沒有性能/時間問題?

[self learnWord:word andSave:YES]; 

這樣可以節省每個字作爲一個對象,但它永遠需要(〜30分鐘)。

所以不是我試圖剛剛創建的對象和快速列舉循環後保存一次完成:

[self learnWord:word andSave:NO]; 

//Save our suggestions 
[[NSManagedObjectContext MR_contextForCurrentThread] MR_saveToPersistentStoreAndWait]; 

這樣做是它檢查是否與「字」值的對象不匹配我們的話,並在這種情況下創建一個實體。然後我給你以下值:

wordSuggestion.word = word; 
wordSuggestion.popularity = @1; 

我試着做被禁止在每個單獨的單詞保存,而是我手動保存一次快速枚舉循環完成(這不工作)。

是否有一種簡單的方法可以快速創建對象並在不花費30分鐘的情況下保存對象?

+0

你有沒有試過在後臺線程保存,通過'NSOperationQueue'與體面的併發操作計數? –

+0

感謝您回覆@LouisTur,不確定如何處理NSOperationQueue,您可以鏈接到的任何示例?我一定會立刻查看它。 – KingPolygon

+0

ohh,那麼我是有點@KingPolygon。我將蘋果的[Core Data and Concurrency](核心數據和併發性)(http://bit.ly/coreDconcurrent)指南加入書籤,但現在在指南的頂部它說_「自編寫此文檔以來,與Core Data併發的最佳實踐發生了巨大變化;請注意,本章不代表當前的建議「_」。所以恐慌一分鐘後,我發現這個:[Core Data Tuts +](http://code.tutsplus.com/categories/core-data)。看起來他們有一些非常好的iOS8特定的核心數據信息..我將不得不自己檢查它 –

回答

1

試圖將250k項目加載到移動設備上的核心數據可能不是最好的方法,你應該描述爲什麼你試圖做到這一點,並考慮替代方案。

如果你確實採取這種方法,那麼最好事先創建數據庫並將其嵌入到應用程序中。然後,如果需要,只能在運行時應用增量更新。這樣加載時間並不重要。

加載時間爲30分鐘是瘋狂的,並且可能是您爲每個添加的單詞提取了一個提取請求(這將是低效的)。相反,你應該把這些單詞分組(比如說100,但你需要測試以找到一個好的值)。對每個批次運行一個提取請求,然後創建並保存所需的增量。

一旦你有了這個,你可以很容易地創建後臺線程和關聯的上下文,然後當你保存這些上下文,你可以保存到父母持久存儲。採取這種方法時,應確保源詞彙表中不包含重複項)。