2015-10-02 37 views
0

我一直在開發具有核心數據的Cocoa應用程序。最初一切似乎都很好,但是當我將數據添加到應用程序時,我發現初始數據窗口需要很長時間才能加載。爲了解決這個問題,我轉移到另一個沒有數據的啓動窗口,所以啓動很快。然而,無論我做什麼,我的第一次獲取和我第一次嘗試加載數據窗口(使用表視圖)總是很慢。 (也就是說,如果我慢慢讀取數據,然後詢問數據窗口,那麼第一次都會變慢。)然後,性能可以接受。緩慢加載核心數據中的持久性存儲協調器

我追蹤了我的應用程序,發現雖然我可以快速地完成程序,但無論如何,檢索持久性店鋪協調員的步驟非常慢......使用旋轉的沙灘球可能會花費15到20秒。

我讀過其他地方,我可能要進行非規範化的數據。我不認爲這是足夠的。早期的版本在實體之間「相互關聯」要少得多,它在啓動時仍然是一團糟。現在我正在查看可能擁有高達18,000個託管對象的實體。一些關係對於使數據正常工作至關重要。

我也看到了有關使用在後臺單獨的管理對象範圍內的選擇。問題在於,即使是這種背景環境也需要很長時間才能使用。如果用戶試圖運行搜索,他或她仍然會永久等待該上下文加載。當用戶決定要在搜索字段中輸入什麼內容時,我可能會花幾秒鐘購買自己的產品,但我無法承受25秒的停頓時間。

我們注意到:一旦數據被導入到持久性存儲,甚至搜索上是不相關的人(和只有1000個對象)仍需要年齡加載表。原因似乎是協調器檢索本身很慢,而不是實際的獲取或上下文。

任何人都可以點我就如何解決這個正確的方向?謝謝!

+1

18,000不是很大......它實際上是非常小的核心數據...不幸的是,你沒有提供足夠的信息。加載PSC可能涉及很多事情,如遷移等。此外,獲取與PSC的初始創建無關,所以我很困惑你爲什麼混合了PSC和獲取。也許如果你展示了一些代碼,以及代碼的哪些部分將會消失很長時間,這將有所幫助。否則,你得到的答案將是純粹的猜測。 –

+0

同意Jody。你必須提出一個更具體的問題。如果你的論文是正確的,並且是PSC,請修改問題以顯示如何創建它。 – Mundi

+0

打開商店同步訪問文件系統。如果你能幫助它,不要從主隊列中打開商店。 – quellish

回答

0

在你創建你的數據模型:

如果你存儲大量的對象,例如照片音頻視頻,你必須非常小心你的模型設計

關鍵的一點要記住的是,當你把一個管理對象到上下文,你把所有的數據到內存

如果大照片位於從驅動表視圖的相同實體剪下的管理對象內,則性能將受到影響。即使您使用的是抓取的結果控制器,您仍然可以一次加載超過一打的高分辨率圖像,這不會是瞬間的。

爲了解決這個問題,屬性,將舉行大型物體應該被剝離到相關實體。通過這種方式,大對象可以保留在持久性存儲中,並可以由故障代替,直到它們確實需要爲止。

如果您需要在表格視圖中顯示照片,則應該使用自動生成的縮略圖圖像。

Read the whole article

0

你可能會走在前面的自己認爲PSC是罪魁禍首。 CoreData在幕後有更多的東西比顯而易見--PSC非常靈活,必須定向。
您指定的數據大小(18K)的實際方法是關注模塊化您的提取請求模板的邏輯並針對特定大小的情況進行驗證(請考慮小型中等大型XtraLarge等)。

對數據進行非規範化的建議沒有考慮到使數據進入完全非規範化狀態的開銷,加上非規範化的(有時)非預期副作用是稀疏性(除非您有非常具體的模型) 。

由於您通常事先並不知道預先訪問和修改了哪些數據,因此請在您的中心任務和任何子任務之間建立一對多關係。這將釋放您的數據訪問的一些限制。

您可以隨時爲最終用戶提供選擇他們想要處理大型數據集的方式的選項。

相關問題