iOS PFBatchFaultingArray - 导致 UITableView 性能不佳(?)

Posted

技术标签:

【中文标题】iOS PFBatchFaultingArray - 导致 UITableView 性能不佳(?)【英文标题】:iOS PFBatchFaultingArray - causing bad UITableView performance(?) 【发布时间】:2013-05-09 20:41:21 【问题描述】:

我在我的一个应用程序中使用带有 NSFetchResultController 的 Core Data。我正在寻找提高性能的方法,我遇到的一个问题是我的 UITableViewController。这有点粗略。我使用了 Instruments Time Profiler,发现以下内容:

好像是从下面的方法调用的:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

    [...]
    Post *cellPost = [self.fetchedResultsController objectAtIndexPath:indexPath];
    [...]

不知道有没有办法解决这个问题?或者它可能是导致性能打嗝的其他原因?

【问题讨论】:

【参考方案1】:

PFBatchFaultingArray 是您通过执行配置为 [fetchRequest setFetchBatchSize:20];(或任何大于 0 的数字)的提取返回的数组。它就像一个常规数组,但如果需要,它的-objectAtIndex: 方法实际上会从磁盘中获取fetchBatchSize-ed 对象组。这可能会很慢,但确实可以降低内存使用率,因为只有 fetchBatchSize many 对象需要实际在内存中,而不是 [array count] many。

您可以尝试将您的获取请求配置为批量大小为 0,以禁用此功能。只需确保您可以在内存中容纳所有需要的对象。

不过,优化应用的 Core Data 性能可能不仅仅涉及这一更改!有一个很好的技术概述 Core Data Best Practices (2012 WWDC session).

【讨论】:

最后一段写得很好,答案也是如此:) 谢谢,很好的答案。我没有指定fetchBatchSize,Core Data 有默认获取大小吗?将其设置为 0 对性能没有太大帮助,但现在我至少知道 PFBatchFaultingArray 是什么了。会看视频。谢谢!

以上是关于iOS PFBatchFaultingArray - 导致 UITableView 性能不佳(?)的主要内容,如果未能解决你的问题,请参考以下文章

{python之IO多路复用} IO模型介绍 阻塞IO(blocking IO) 非阻塞IO(non-blocking IO) 多路复用IO(IO multiplexing) 异步IO

IO模型--阻塞IO,非阻塞IO,IO多路复用,异步IO

IO复用阻塞IO非阻塞IO同步IO异步IO

四种IO模型‘阻塞IO/非阻塞IO/信号驱动IO/异步IO‘

5种IO模型阻塞IO和非阻塞IO同步IO和异步IO

网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO