2012-11-15 148 views
1

我在iOS應用第一次運行時插入了大量實體。我想知道在保存之前可以在我的上下文中插入多少項目?我正在從Web調用中獲取大型JSON對象。從JSON中提取大量實體並插入它們。核心數據導入大量數據

我應該如何處理大量的插入?

謝謝

+0

裝入的JSON的重量是多少? KBS? MBS? GBS? – alemangui

+0

它可以有很大的不同,但現在最多的是740K – zumzum

回答

0

zumzum,

有許多問題擔心進口大量項目進入核心數據的時候。

第一個也是最重要的問題是管理內存。大型JSON文檔分析成大量的小項目。這些會迫使您的虛擬機佔用空間不可逆轉地增長。這個常駐足跡是應用程序被操作系統殺死的頭號原因。您可以擁有小尺寸的分配內存,並且由於您的居民足跡的大小而仍然會被殺死。

因此,大型文檔應該與積極的中間內存清理操作分階段處理。使用併發MOC並在操作之間進行重置是方法。然後,我實現一個尾隨修剪模式來清理保留在我的主線程MOC中的任何多餘的內存。

Andrew

+0

下面的評論很棒,它們很有意義。這是真的,因爲我現在處於Kb順序,這可能是不成熟的優化。但是,我有興趣瞭解這一點的最佳方法,就像常識一樣。我在導入過程中對應用程序進行了剖析,並通過保存和重置上下文來執行漸進式清理,從而提高了我的方案中的性能。所以,我將此標記爲現在最適合我的答案。 – zumzum

0

我認爲你將有關於上下文的保存之前的大小沒有問題,但你一定要執行這個後臺線程,因爲它很可能會凍結一段時間的應用程序。如果僅在您第一次啓動應用程序時發生這種情況,您可以在主線程上放置進度指示器或其他內容,同時將背景保存在後臺線程中。

有關核心數據併發上下文保存的詳細信息,請參閱this question的第一個答案。

+0

我認爲我主要關心的不是主線程或不是,我在想內存。真的,也許我的情況會很好,但是,規則是什麼?意思是,核心數據將用於管理手機內存,同時在一個上下文中插入大量實體? – zumzum

+1

在Apple的文檔中沒有描述未保存上下文的特定元素,但考慮到BLOB(二進制大對象)顯然需要在單個上下文對象中加載/保存,這就是文檔陳述的內容:「鬆散的經驗法則大小爲千字節的對象大小適中,大小爲兆字節大小的對象大小很大,有些開發人員在數據庫中使用10MB BLOBs取得了良好的性能。「換句話說,以千字節爲單位存儲未保存的上下文是安全的。 – alemangui

+1

在這一點上擔心它可能是一個過早的優化。經驗法則是,如果並且直到需要,不用擔心。儀器分析工具會告訴你所有你需要的東西,但只有740K,我不會太擔心它。我已經處理了8-10MB左右的JSON之前的一段時間,它很好。最終我不得不優化一些東西,但直到我開始看到問題時,我才知道這些東西是什麼。 –