我一直在使用 Core Data 开发一个 Cocoa 应用程序。最初一切似乎都很好,但是当我向应用程序添加数据时,我发现初始数据窗口需要很长时间才能加载。为了解决这个问题,我移到了另一个没有数据的启动窗口,所以启动很迅速。但是,无论我做什么,我的第一次获取和我第一次尝试加载数据窗口(带有表格视图)总是很慢。(也就是说,如果我缓慢地获取然后请求数据窗口,那么第一次两者都会很慢。)之后,性能是可以接受的。
我跟踪了我的应用程序,发现虽然我可以快速单步执行程序,但无论如何,检索持久存储协调器的步骤非常慢……旋转的沙滩球可能需要 15 到 20 秒。
我在其他地方读过我可能想要对数据进行非规范化。我认为这还不够。早期版本在实体之间的“互连”要少得多,而且它在启动时仍然是一个蛞蝓。现在我正在查看可能拥有多达 18,000 个托管对象的实体。某些关系对于使数据正常工作至关重要。
我还阅读了有关在后台使用单独的托管对象上下文的选项。这样做的问题是,即使是这个背景上下文也需要很长时间才能使用。如果用户尝试运行搜索,他或她仍将永远等待该上下文加载。当用户决定在搜索字段中输入什么内容时,我可能会为自己争取几秒钟,但我不能拖延 25 秒。
我注意到,一旦将数据导入到持久存储中,即使在与其他表无关(并且只有 1000 个对象)上搜索仍然需要很长时间才能加载。原因似乎是协调器检索本身很慢,而不是实际的获取或上下文。
谁能指出我如何解决这个问题的正确方向?谢谢!