爲OSX

2012-05-31 53 views
0

優化無響應(核心數據)應用程序在非響應(OSX)應用程序中存在實際問題。使用大約3K(核心數據)對象時,應用程序在啓動和保存過程中以及添加新的託管對象時會凍結。爲OSX

當我深入調用樹,使用(儀器)時間剖析器,大部分時間似乎花費排序陣列控制器。在啓動過程中,有一半時間用於NSUndoManager,它在陣列控制器正在設置其內容時觀察通知...

是否在數組控制器正在進行排序而新的託管對象正在實例化?我是否需要暫停排序? NSUndoManager可能是罪魁禍首嗎?

更重要的是,人們如何去分析這樣的事情呢?這很可能是我進行了某種指數排序,我的意思是,當一個數組控制器自行排序時,其他幾個數組控制器可能會不必要地重新排序。

我使用的數據模型相當廣泛。另外,我在2個.xib文件中有大約30個ish數組控制器,其中一些控制器管理相同的類類型。

Marcus Zarra's book關於核心數據已經非常翔實,在這方面尤其是關於優化核心數據的章節。

另外,Matt Gallagher的this article非常令人印象深刻,雖然我遇到的問題可能與需要優化的代碼無關。

任何和所有的提示,歡迎,我拉我的頭髮在這裏。你能指點我一些教程或書籍,可以幫助我嗎?謝謝。

+0

你需要撤消管理器嗎?你總是可以將它設置爲「無」,看看它是否有所改進。 。 。 – deanWombourne

+0

好主意。 我檢查了[撤消架構文檔](https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/UndoArchitecture/UndoArchitecture.html#//apple_ref/doc/uid/10000010-SW1),但我並不清楚在創業期間的哪一點,我應該這樣做。 – Fnord23

+0

我將託管對象上下文的NSUndoManager設置爲nil,都位於應用程序委託的init和awakeFromNib中。兩種情況都沒有真正的改善。 Time Profiler不會顯示NSUndoManager再被涉及。 – Fnord23

回答

0

如果undoManager佔用了一半時間,但在刪除撤銷管理器時看不到性能改進,我認爲應該將IO視爲潛在的瓶頸。

看看花在做I/O操作上的時間。另外,當涉及到核心數據時,我會在後臺線程中完成所有工作。沒有意義讓它掛起你的用戶界面。希望你能夠使用父母/孩子的MOC,因爲這大大簡化了多個上下文的工作。

即使沒有,它是值得額外的工作,讓它在一個單獨的線程工作。你的UI會感謝你。

+0

好的,讓我來做一些關於使用線程等的研究。我會盡快回復你,儘管可能需要一段時間。 – Fnord23