重复添加到RealmList的效率

时间:2015-11-30 01:33:45

标签: android realm

在其中一个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()只抓取一个长列表来添加一个值。这有效吗?如果没有,那么更好的方法是什么?

2 个答案:

答案 0 :(得分:1)

你是对的。这不是最好的approch,你会得到每一行的列表:

  1. 使用交易你有多少工作要做。一切都会 马上完成(全部在一起)
  2. 循环添加,
  3. 每个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