有一个非常无响应(OSX)应用程序的实际问题。当使用大约3K(核心数据)对象时,应用程序会在启动和保存期间以及添加新的托管对象时冻结。
当我深入调用树时,使用(Instruments)Time Profiler,大部分时间似乎都花在排序阵列控制器上。在启动期间,有一半的时间用于NSUndoManager,它在阵列控制器设置其内容时观察通知...
在实例化新的托管对象时是否对数组控制器进行排序?我需要暂停排序吗? NSUndoManager可能是罪魁祸首吗?
更重要的是,如何分析这样的事情呢?很可能我正在进行某种指数排序,我的意思是当一个阵列控制器自行排序时,其他几个阵列控制器也可能不必要地开始重新排序。
我使用的数据模型相当广泛。另外,我在2个.xib文件中有大约30个阵列控制器,其中一些管理相同的类型。
核心数据的Marcus Zarra's book非常有用,在此背景下尤其是关于优化核心数据的章节。
另外,Matt Gallagher的this article令人印象深刻,尽管我遇到的问题可能与需要优化的代码无关。
欢迎任何和所有提示,我在这里拔头发。你能指点我一些可以帮助我的教程或书籍吗?感谢。
答案 0 :(得分:0)
如果undoManager占用了一半的时间,但是在删除撤消管理器时没有看到性能提升,我会说你应该把IO视为潜在的瓶颈。
查看执行I / O操作所花费的时间。
另外,谈到核心数据,我会在后台线程中完成所有工作。没意思让它挂起你的UI。希望您能够使用父/子MOC,因为这极大地简化了多个上下文的使用。
即使没有,也值得额外的工作让它在一个单独的线程中工作。你的用户界面会感谢你。