gpt4 book ai didi

iphone - 核心数据: Interrupt executing NSFetchRequest

转载 作者:行者123 更新时间:2023-12-03 18:31:49 25 4
gpt4 key购买 nike

一直在寻找这个:

在Core Data中,有没有办法中断/停止/取消并执行NSFetchRequest?

我正在 iPhone 应用程序中实现增量搜索,并且我已经尝试了各种优化它的方法,但这还不够(我有 42,000 条记录),所以我必须在 NSOperation 中运行它。当输入一个新字符时,我需要取消之前的 fetchRequest,但是 [nsoperation cancel] 不执行任何操作。

另一种方法可能是将我正在搜索的字段移动到其他可中断索引中,可能在内存中,也可能是单独的 sqlite3 数据库,该数据库似乎可以通过 sqlite_interrupt 中断。

最佳答案

你的问题的直接答案是否定的。根据您当前的设计,最好的选择是在一个操作中执行它们,但是您需要担心线程障碍并减慢速度。请记住,如果您的操作不在主线程上运行,那么您需要一个单独的 NSManagedObjectContext 来执行该操作,否则您将遇到线程问题。

更好的问题:为什么要为每个角色进行新的提取?

如果您已经从之前的搜索中获取了结果,并且用户没有删除字符,则只需获取现有结果并针对 NSArray 运行谓词即可。这将进一步细化搜索,而不是每次都去磁盘。由于它在内存中,因此速度会非常快。

实现搜索字段时请考虑以下选项:

  • 仅在第一个字符上击打磁盘
  • 仅当从搜索框中删除字符时才打盘
  • 考虑预加载 objectID 和可搜索属性以避免磁盘命中。

根据您要搜索的内容(并且有一些方法可以重新规范化核心数据存储以改进搜索),您可以将相当多的数据预加载到内存中。即使有 42K 记录,如果搜索属性足够小,您也可以将它们全部加载到内存中。

如果用户从按“A”开始,您无论如何都需要测试该用例。

NSFetchRequest 的哪一部分很慢?访问 SQLite 数据库或将数据加载到内存中?根据您的回答,您可以直接提高搜索性能。

关于iphone - 核心数据: Interrupt executing NSFetchRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4638444/

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