簡體   English   中英

如何提高iPhone上Core Data對象插入的性能?

[英]How do I improve performance of Core Data object insert on iPhone?

我正在嘗試將大量數據導入到iPhone上的核心數據存儲中。 我正在使用SQLite支持核心數據存儲。 這似乎比我預期的要長。 我已經減少了例程,因此它基本上只是嘗試獲取一個對象(看它是否已經存在)然后創建一個新對象(如果它沒有)(他們從來沒有這樣做,因為我導入數據)。 但是,提取並不是耗時的部分。 這是對象的創建。 基本上,違規代碼是:

MobileObject *newObject = (MobileObject *)[NSEntityDescription insertNewObjectForEntityForName:objDesc inManagedObjectContext:managedObjectContext];

我注意到在模擬器上,它開始時相當快,大約有100個對象創建了一秒鍾。 它雖然減慢了,但是當創建五千個對象時,對於100個對象幾乎是2秒,並且當創建一萬個對象時,每100個對象為4秒。 整組21000個對象需要10分鍾以上。 這就是取出所有實際有用的代碼(這只是一個fetch和一個對象創建)。 它在實際設備上要慢很多(可能是4倍)。

我不明白的是為什么核心數據快速啟動但隨后開始減速。 我已經嘗試了索引和我的數據沒有索引。 我已經嘗試創建自己的自動釋放池,我會定期在循環中耗盡。 我在每個對象創建后都嘗試過保存。 我試過等到最后才能保存。 但無論我做什么,表現仍然看起來很悲慘。 將新對象添加到核心數據存儲中並且其中包含幾千個對象,是否會很慢? 有什么建議么?

它可以很快,但這取決於你在做什么。 正如其他人所建議你應該看看儀器並找到實際的熱點。 發布實際的導入代碼也有助於識別問題。

我也有這個問題。 我正在從遠程數據存儲中導入100,000個簡單對象,並且已經按照Apple關於批量導入的說明進行操作。 前幾批(每批2000個對象)開始合理,然后保存緩慢爬行。

我已將數據進一步划分為50個批次,但仍然很慢。 儀器顯示每次保存時間越來越長。 不知道為什么,我正在為每個批處理創建一個新的上下文,並且撤消管理器設置為nil。

不幸的是,我沒有任何有用的東西可以添加到這個對話中...... 稍后會更新。

嘗試使用儀器。 插入每個對象后不保存嗎? 實際上,更多與插入相關的代碼和方案可能非常有用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM