gpt4 book ai didi

iphone - CoreData,NSFetchedResultsController和performFetch:

转载 作者:行者123 更新时间:2023-12-01 19:12:17 27 4
gpt4 key购买 nike

我有450.000条记录的coredata。

为了在uitableview中显示它,我正在使用NSFetchedResultsController。
它可以工作,但是有很大的问题。

在NSFetchedResultsController开始工作之前,我们需要调用
PerformFetch:
我的情况下,此功能大约需要2-3分钟。之后我可以
在UITable中显示数据没有任何问题。但是那2-3分钟
杀了我:(

情况不会那么糟,但是我还需要在此表中进行搜索。
因此,对于搜索,我需要更改谓词,调用 performFetch:
再等2-3分钟!

无论如何,可以使 performFetch:更快吗?
或者,也许至少有人可以告诉我如何在不调用 performFetch的情况下进行搜索:

最佳答案

2-3分钟是要花费450,000条记录的漫长时间。我怀疑大部分时间都花在一些sqlite调用上,而不是您自己的代码上。使用时间分析器,并在performFetch:树下查看花费最多时间的 call 。

若要查看您的SQL是否已优化,请通过将其添加到“方案”设置中的“启动时传递的参数”来启用SQLite日志记录:

-com.apple.CoreData.SQLDebug 1

有关更多详细信息,请参见 question

运行您的应用程序,并记下调用performFetch:时执行的查询。接下来,阅读有关 EXPLAIN QUERY PLAN 的信息。如果sqlite是瓶颈,这是您可以使用的最有用的工具。您需要从应用程序(模拟器或设备)中获取.sqlite文件,然后对查询运行EXPLAIN QUERY PLAN,以查看是否花费太长时间。如果我不得不猜测,我会说您的查询正在执行全表扫描,而不是使用适当的索引。全表扫描成本很高。

如果确实是瓶颈,它也可以帮助您优化搜索。

这里是一些有用的链接。
  • How can I improve core data fetch performance on the iPhone?
  • Optimizing Core Data searches and sorts
  • 关于iphone - CoreData,NSFetchedResultsController和performFetch:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15703879/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com