我目前正在使用一种方法,我在后台运行获取请求以获取对象ID,然后使用-existingObjectWithID:error:
实例化它们。
问题是这些对象与大量对象有很多关系。当访问这些对象时,UI会冻结一段时间。 (可以一次访问它们。)
我猜相关的对象是错误的。我试图找出一种在后台预加载它们的方法。这个问题有解决方案吗?
答案 0 :(得分:0)
在setRelationshipKeyPathsForPrefetching:
上尝试使用NSFetchRequest
方法。传入一组键,这些键表示应该获取而不是出现故障的关系。
答案 1 :(得分:0)
您是否确定它是导致减速的主线程(确实听起来像这样) - 我会使用Instruments和“Time Profiler”来确定,并且还有一种方法{{3 }}
如果它是您的主要线程,那么有turn on SQL debugging/timing too(请看2010年,而不仅仅是2011年)如何优化核心数据。
答案 2 :(得分:0)
核心数据不是线程安全的。因此对于后台线程,您应该有单独的托管上下文。 通常核心数据不需要很多时间来加载。但是如果你要存储blob(比如图像数据),它可以达到性能。您应该使用要设置页面大小的NSFetchRequestController。它要快得多,所以你可能不必担心背景提取