“对象控制器”,实体模式:在 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) 中将企业应用程序与配置文件管理器一起用于单应用程序模式

iOS学习之MVC模式

在 OSx 10.9 Mavericks 上安装 Cantera 2.1

错误:无法在 Mavericks 上构建 gem 原生扩展

在 Mavericks 上编译 znorts blockparser - 出错

Android Studio 无法在 Mac OSX (Mavericks) 上加载 JVM