在其中一个Realm代码示例中,他们有以下内容,
for (int j = 0; j < i; j++) {
Cat cat = realm.createObject(Cat.class);
cat.setName("Cat_" + j);
person.getCats().add(cat);
}
如果i
碰巧非常大,超过1k或更高,会发生什么?这意味着person.getCats()
只抓取一个长列表来添加一个值。这有效吗?如果没有,那么更好的方法是什么?
答案 0 :(得分:1)
每个COMMITSIZE
提交事务long added=0;
long COMMITSIZE =100;
//open transaction
realm.beginTransaction();
pCats = person.getCats();
for (int j = 0; j < i; j++) {
Cat cat = realm.createObject(Cat.class);
cat.setName("Cat_" + j);
pCats.add(cat);
if(added%COMMITSIZE == 0){
realm.commitTransaction();
//reopen transaction
realm.beginTransaction();
}
}
//commit transaction
realm.commitTransaction();
答案 1 :(得分:0)
getCats()
只会获取对列表的引用,因此即使是很长的列表也不应该成为问题。
Realm的一个原则是零拷贝,所以一旦得到Realm的支持,就不会复制它们 - 请参阅http://www.slideshare.net/ChristianMelchior/realm-building-a-mobile-database。