我正在测试我的应用程序的性能,看看它在处理大量数据时的表现。我的应用程序是基于核心数据的,并在实体模式下使用数组控制器来获取数据。
我发现我的应用程序获取了核心数据中存在的所有托管对象,因此我在启动时设置了数组控制器的获取谓词。这大大减少了获取的对象数量。但问题是我的应用程序在充满数据时仍然需要很长时间才能启动。
我在仪器中运行应用程序,核心数据获取仪器确认这不是问题(我的应用程序在启动时仅获取 20-30 个对象)。但是在 Shark 下运行它,我可以看到启动后 4-5 秒,堆栈上的唯一调用是对应用程序托管对象上下文的调用。所以我认为它与托管对象上下文和存储的数据之间的交互有关,即使我没有获取所有数据。如果我清空应用程序或在其中留下少量数据,它会很快启动。
有人知道为什么会这样吗?我错过了一些明显的东西吗?如果我只获取少量对象,为什么要加载托管对象上下文需要这么多?我总是读到核心数据可以很好地扩展,并且编程指南指出 10.000 个对象对于核心数据来说并不多,但在我的应用程序中它有很大的不同,所以我想知道我错在哪里。