首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AFIncrementalStore的性能问题

AFIncrementalStore的性能问题
EN

Stack Overflow用户
提问于 2013-08-13 04:26:05
回答 1查看 374关注 0票数 0

我正在试验AFIncrementalStore,这是很棒的,但我注意到我有一些性能问题。

具体来说,我用它从facebook图形api中获取了一堆facebook好友的信息,而且我看到了一些保存操作的非常慢的时钟时间。就上下文而言,我正在加载大约900条记录。仪器告诉我问题是:

代码语言:javascript
复制
 NSManagedObjectID *backingObjectID = [self objectIDForBackingObjectForEntity:entity withResourceIdentifier:resourceIdentifier];

这反过来又被称为

代码语言:javascript
复制
[backingContext performBlockAndWait:^{
        backingObjectID = [[backingContext executeFetchRequest:fetchRequest error:&error] lastObject];
    }];

有没有人有过使用大数据集的AFIncremental存储的经验?

另外,我不太明白为什么所有这些操作都发生在主线程上,而所有这些操作都是使用performBlockAndWait操作从PrivateQueueConcurrencyType上下文中启动的。任何帮助都非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-13 07:09:43

只是部分回答:

performBlockAndWait:将在私有队列上执行该块,但是调用线程将“似乎要等待”,直到块完成。(请注意下面解释的“似乎等待”)。

队列是同步访问共享资源的底层机制。这确保可以同时访问共享资源。

现在,GCD可以应用关于选择用于驱动队列的线程的优化:如果您同步地分派,GCD可以选择使用当前线程来驱动专用队列。

注意:在特定队列上排队的块可以在任何线程上执行。尽管如此,“执行上下文”是队列,它决定了同步。

因此,换句话说,performBlockAndWait:将显示为将被同步调用。如果该块将在同一线程上执行,则此线程将不会阻塞。它只是在执行块时切换到私有队列(从而保证共享访问)。这是有意义的,因为消息的名称表示:"..AndWait“。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18200677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档