是否可以直接將數據庫/實體加載到CoreData中?該應用程序依賴於數據,初始數據負載超過100,000個項目。在iPhone 4上完成插入需要大約15分鐘,這是一個令人不快的時間。將數據庫直接加載到CoreData中
有什麼辦法我可以:
- 加載預填充實體到CoreData
- 加載預填充的數據庫(所有實體)到CoreData
- 東西沿着這些線路 使數據的插入速度明顯加快
謝謝。
是否可以直接將數據庫/實體加載到CoreData中?該應用程序依賴於數據,初始數據負載超過100,000個項目。在iPhone 4上完成插入需要大約15分鐘,這是一個令人不快的時間。將數據庫直接加載到CoreData中
有什麼辦法我可以:
謝謝。
使用CoreData創建數據庫並將其添加到項目包中,然後在第一次加載時,將數據庫從數據包複製到文件系統,以便它可寫,然後從那裏打開它。您可能希望將數據庫標記爲不共享給iCloud,具體取決於您的需要。
是的,這是可能的。對此的「正常」方法是預先構建數據庫,將其作爲資源包含在內,檢查啓動時是否在文檔文件夾中包含數據庫,如果沒有,則從包中複製它。
我通常運行我的代碼在模擬器上構建數據庫,然後將其從sim文件夾複製並添加到我的項目資源中。
通過應用程序包複製預先創建的Core Data生成的sqlite文件是個好主意,儘管我覺得它有點麻煩。如果你有一個靜態數據存儲區和一個動態數據存儲區 - 這在大多數情況下可以像這樣複製靜態數據。
但是,備案15分鐘是荒謬的。我可以保證你可以把它縮短到幾秒鐘。
我已經能夠在不到30秒的時間內在第一代iPad上完成500K插入。最重要的優化技術是:
@autoreleasepool
後臺線程
那簡單嗎?我喜歡。因此,您可以構建數據庫,將核心數據數據庫作爲資源複製,然後替換應用程序在第一次加載時生成的數據庫?或者在它生成它自己之前將它複製過來。 –
是的。在調用任何核心數據例程之前執行此操作,在打開核心數據時給應用程序一個既成事實。 –
盧克 - 後者。檢查它是否存在於doc目錄中,並且如果不從該包中複製預構建版本。 – Bladebunny