我的Realm数据库中有10,000
Person
Objects
,我拥有的只是每个人的ID。我一直在分析我提出的不同解决方案,以更新每个Person对象上的所有名称。
在我的测试应用程序中,我使用以下内容检索所有ID。
以下代码仅用于获取测试的ID,在实际应用中我已经拥有ID
var ids = [String]()
for person in realm.objects(Person) {
ids.append(person.id)
}
更新10,000个人物对象的所有名称的第一种方法
realm.write {
let people = realm.objects(Person).filter("id IN %@", ids)
for person in people {
person.name = "lionpants"
}
}
更新10,000个人对象的所有名称的第二种方法
realm.write {
for id in ids {
let person = realm.objectForPrimaryKey(Person.self, key: id)
person?.name = "lionpants"
}
}
令人惊讶的是,这两种方法使用Xcode Time Profiler平均大约1200ms
运行时(包括获取ID)(我认为第一种方法与谓词会更快)。
就个人而言,由于缺乏谓词,我更喜欢第二种方法。但是,在使用Realm进行批量更新时,是否有首选/不同的方法?也许我错过了一些内置函数?
答案 0 :(得分:6)
realm.write {
let people = realm.objects(Person).filter("id IN %@", ids)
people.setValue("lionpants", forKey: "name")
}
应该稍快一些,并且通常使用KVC对结果会更高效,因为Realm可以采取一些快捷方式。