【发布时间】:2010-08-27 21:42:34
【问题描述】:
Core data 在 iPhone 上的表现绝对惨不忍睹。索引是完全损坏还是只是一个糟糕的实现?
我的核心数据存储(SQLite 后备存储)中有大约 21500 个单一类型的对象。对象在 UUID 上进行索引,该 UUID 是一个 NSString(例如,一个看起来像这样:“6b09e200-07b6-11df-a245-002500a30d78”)。
在 NSManagedObjectContext 中使用 executeFetchRequest 单次获取对象需要大约 0.75 秒!这是最简单的谓词“uuid == $UUID”,其中 $UUID 是一个字符串,如上例所示。
这真是令人惊讶。如果我想将商店中的每件物品一件一件地取出来,需要将近 4.5 个小时!
有什么办法可以提高这种性能,还是我应该完全放弃核心数据?
【问题讨论】:
-
为了比较,我尝试获取 21,500 行的整个表,并使用结果创建一个以 UUID 作为键的 NSDictionary。然后,我在每个 UUID 上逐个遍历整个字典并返回每个对象。整个过程只需大约 5 秒即可完成。