重复添加到 RealmList 的效率

Efficiency of repeatedly adding to a RealmList

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

你说得对。这不是最好的方法,您将在每一行获得列表:

  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();
    

getCats() 只会获取对列表的引用,因此即使是很长的列表也不成问题。

Realm 的原则之一是零复制,因此一旦得到 Realm 的支持,它们就不会被复制 - 参见 http://www.slideshare.net/ChristianMelchior/realm-building-a-mobile-database