我需要存储20,000条简短的记录(地址标识符到名称),并允许用户在UISearchBar中按ID或名称搜索。
方法1(核心数据):为了节省内存,我尝试使用带有SQLite作为后端的CoreData实现此功能,但发现在初始导入完成时存储20,000条记录的速度很慢。然后,当用户逐个字母地键入UISearchViewBar时,响应也明显变慢。
方法2(NSMutableArray):当我使用NSMutableArray在内存中实现相同的东西时,UISearchBar上的响应时间非常快。
在第一种方法中,一次只有一小部分记录在内存中,但响应时间很慢。在第二种方法中,20,000个项目在内存中仅占用700KB(在MB下),响应时间很快。
由于Core Data提供持久存储并使查询非常灵活,我希望尽可能使用它。有没有人有关于是否仍然使用Coredata但获得更快结果的方法的建议?
由于
答案 0 :(得分:2)
为什么不两个都做?使用Core Data进行持久化。将managedObjectID和属性预取到内存缓存中,您可以使用搜索栏进行搜索。选择该项后,您可以使用managedObjectID从MOC中获取实体。
使用NSArray的filteredArrayUsingPredicate:
和NSMuatableArray的filterUsingPredicate
答案 1 :(得分:1)
在CoreData上进行击键查询并不是一个好主意。
CoreData并不意味着反复遭遇。您必须记住实际运行此数据库的设备。将CoreData放在一个已有10年历史的桌面上,看看它的运行速度有多快。
另外,我很确定有一种方法可以将NSPredicate与NSArrays一起使用......没有链接,但我认为我之前已经看过它。
同样是的,最初导入CoreData的过程非常缓慢。 IIRC,每个CoreData记录创建时有2个单独的查询。
如果你想降低内存消耗,只需在对象中调用你需要的东西进行搜索,然后在你真正需要的时候拉出整个对象。