为OSX

2012-05-31 23 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