【发布时间】:2017-09-14 20:59:49
【问题描述】:
这个问题是关于使用两种不同的方式将对象插入领域。我注意到第一种方法要快得多,
但与第二种方法相比,尺寸结果是巨大的。两种方法之间的区别在于移动
在for 循环的外部和内部写入事务。
// Create realm file
let realm = try! Realm(fileURL: banco_url!)
当我像这样添加对象时,Realm 文件增长到 75.5MB:
try! realm.write {
for i in 1...40000 {
let new_realm_obj = realm_obj(value: ["id" : incrementID(),
"a": "123",
"b": 12.12,
"c": 66,
"d": 13.13,
"e": 0.6,
"f": "01100110",
"g": DateTime,
"h": 3])
realm.add(new_realm_obj)
print("???? \(i) Added")
}
}
当我像这样添加对象时,Realm 文件只增长到 5.5MB:
for i in 1...40000 {
let new_realm_obj = realm_obj(value: ["id" : incrementID(),
"a": "123",
"b": 12.12,
"c": 66,
"d": 13.13,
"e": 0.6,
"f": "01100110",
"g": DateTime,
"h": 3])
try! realm.write {
realm.add(new_realm_obj)
print("???? \(i) Added")
}
}
要添加到领域文件的我的班级
class realm_obj: Object {
dynamic var id = Int()
dynamic var a = ""
dynamic var b = 0.0
dynamic var c = Int8()
dynamic var d = 0.0
dynamic var e = 0.0
dynamic var f = ""
dynamic var g = Date()
dynamic var h = Int8()
}
自动递增功能
func incrementID() -> Int {
let realm = try! Realm(fileURL: banco_url!)
return (realm.objects(realm_obj.self).max(ofProperty: "id") as Int? ?? 0) + 1
}
有没有更好或更正确的方法来做到这一点?为什么在这些情况下我会得到如此不同的文件大小?
【问题讨论】:
-
你能添加'incrementID()'的代码吗?
-
@joern 刚刚添加
-
incrementID() 已编辑...对不起我的复制和粘贴习惯。
-
我猜你可以尝试分批添加 5000 个项目,看看会发生什么
-
如果您在“for”之前调用一次 incrementID(),然后在创建对象时使用 result + i 作为 id,则可以对其进行一些优化。除非您使用多线程并同时进行更多导入,否则这种方法应该可以为您节省大量对领域 dba 的调用。