“对象控制器”,实体模式:在 Mavericks 上获取速度很慢
Posted
技术标签:
【中文标题】“对象控制器”,实体模式:在 Mavericks 上获取速度很慢【英文标题】:"Object controller", Entity mode: fetching is slow on Mavericks 【发布时间】:2014-03-14 13:19:09 【问题描述】:在最后一台 iMac 上加载 8425 个项目需要 5 秒。
我不知道还有什么可以为您提供更多信息。我正在为 NSComboBox 的下拉列表加载项目。
我在 Snow Leopard 和 Mountain Lion 上进行了测试,效果很好。在几台机器上尝试过,它在除 Mavericks 之外的所有 osx 上都能正常工作。相同的构建和数据库文件。
【问题讨论】:
【参考方案1】:我的猜测是 NSComboBox 会一个一个地加载所有项目,而 CoreData 每次都必须往返于磁盘。您应该使用 Instruments 检查这种情况以确定发生了什么。
尝试在显示之前预取所有项目。您可以在此类提取期间使用设置为NO
的-[NSFetchRequest returnsObjectsAsFaults:]
属性。
这是我项目中的一个用于预取的 sn-p:
if ( ! didPrefetch)
didPrefetch = YES;
// Your fetch request that will load all items
NSFetchRequest* fetchRequest = ... ;
// If you need to prefetch some relationships
fetchRequest.relationshipKeyPathsForPrefetching = @[...];
// This forces objects to fault info row cache
fetchRequest.returnsObjectsAsFaults = NO;
[managedObjectContext executeFetchRequest:fetchRequest error:&error];
【讨论】:
在仪器上,我可以看到特定实体的提取持续时间很长。我能从中得到什么更有用的信息?我正在使用“CoreData Fetches”工具。您建议以编程方式设置属性?那我就不能只依赖interface builder绑定了? 顺便说一句,我也尝试设置属性“使用延迟获取”,但没有成功。 我想您不必摆脱绑定,但您需要在 NSComboBox 尝试通过绑定加载数据之前进行预取。 我刚刚发现,Mavericks 的获取速度很慢。我在 Snow Leopard 和 Mountain Lion 上运行过该应用程序,效果很好。 顺便说一句,在打开 NSComboBox 之前肯定会获取项目。他们实际上在打开后减慢了整个屏幕。以上是关于“对象控制器”,实体模式:在 Mavericks 上获取速度很慢的主要内容,如果未能解决你的问题,请参考以下文章
在 Mavericks Server (MDM) 中将企业应用程序与配置文件管理器一起用于单应用程序模式
在 OSx 10.9 Mavericks 上安装 Cantera 2.1