0

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

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

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

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

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

Marcus Zarra关于核心数据的书提供了非常丰富的信息,尤其是关于优化核心数据的章节。

此外, Matt Gallagher 的这篇文章令人印象深刻,尽管我遇到的问题可能与需要优化的代码无关。

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

4

1 回答 1

0

如果 undoManager 占用了一半的时间,但在删除 undo 管理器时没有看到性能改进,我会说你应该将 IO 视为潜在的瓶颈。

查看花费在 I/O 操作上的时间。

此外,当涉及到核心数据时,我会在后台线程中完成所有工作。让它挂起你的用户界面是没有意义的。希望您能够使用父/子 MOC,因为这大大简化了使用多个上下文的工作。

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

于 2012-06-01T05:01:35.647 回答