【发布时间】:2012-05-31 10:10:12
【问题描述】:
在使用非常无响应 (OSX) 的应用时遇到实际问题。当使用大约 3K(核心数据)对象时,应用在启动和保存以及添加新的托管对象时会冻结。
当我使用 (Instruments) Time Profiler 深入研究调用树时,大部分时间似乎都花在对数组控制器进行排序上。在启动过程中,一半的时间用于 NSUndoManager,它会在数组控制器设置其内容时观察通知...
在实例化新的托管对象时数组控制器是否排序?我需要暂停排序吗? NSUndoManager 会不会是罪魁祸首?
更重要的是,如何分析这样的事情?很可能我正在进行某种指数排序,我的意思是当一个数组控制器自行排序时,其他几个数组控制器也可能不必要地开始重新排序。
我使用的数据模型相当广泛。此外,我在 2 个 .xib 文件中有大约 30 个数组控制器,其中一些管理相同的类类型。
Marcus Zarra's book 关于 Core Data 的内容非常丰富,尤其是关于优化 Core Data 的章节。
此外,Matt Gallagher 的 this article 也令人印象深刻,尽管我遇到的问题可能与需要优化的代码无关。
欢迎任何和所有提示,我在这里拉头发。你能指点我一些可以帮助我的教程或书籍吗?谢谢。
【问题讨论】:
-
您需要撤消管理器吗?您可以随时将其设置为
nil并查看它是否有所改进。 . . -
好主意。我检查了undo architecture docs,但我不清楚在启动期间的哪个时间点我应该这样做。
-
我在应用委托的 init 和 awakeFromNib 中都将托管对象上下文的 NSUndoManager 设置为 nil。两种情况都没有真正的改善。 Time Profiler 不再显示 NSUndoManager 参与其中。
-
好吧,反正这是一个很长的镜头:)对不起!
标签: xcode core-data instruments sorting objective-c-2.0