优化OSX的无响应(核心数据)应用程序

时间:2012-05-31 10:10:13

标签: xcode core-data instruments sorting objective-c-2.0

有一个非常无响应(OSX)应用程序的实际问题。当使用大约3K(核心数据)对象时,应用程序会在启动和保存期间以及添加新的托管对象时冻结。

当我深入调用树时,使用(Instruments)Time Profiler,大部分时间似乎都花在排序阵列控制器上。在启动期间,有一半的时间用于NSUndoManager,它在阵列控制器设置其内容时观察通知...

在实例化新的托管对象时是否对数组控制器进行排序?我需要暂停排序吗? NSUndoManager可能是罪魁祸首吗?

更重要的是,如何分析这样的事情呢?很可能我正在进行某种指数排序,我的意思是当一个阵列控制器自行排序时,其他几个阵列控制器也可能不必要地开始重新排序。

我使用的数据模型相当广泛。另外,我在2个.xib文件中有大约30个阵列控制器,其中一些管理相同的类型。

核心数据的

Marcus Zarra's book非常有用,在此背景下尤其是关于优化核心数据的章节。

另外,Matt Gallagher的this article令人印象深刻,尽管我遇到的问题可能与需要优化的代码无关。

欢迎任何和所有提示,我在这里拔头发。你能指点我一些可以帮助我的教程或书籍吗?感谢。

1 个答案:

答案 0 :(得分:0)

如果undoManager占用了一半的时间,但是在删除撤消管理器时没有看到性能提升,我会说你应该把IO视为潜在的瓶颈。

查看执行I / O操作所花费的时间。

另外,谈到核心数据,我会在后台线程中完成所有工作。没意思让它挂起你的UI。希望您能够使用父/子MOC,因为这极大地简化了多个上下文的使用。

即使没有,也值得额外的工作让它在一个单独的线程中工作。你的用户界面会感谢你。