领域花费太长时间将对象复制到RealmObject

时间:2015-07-03 16:39:39

标签: android realm

我正在使用领域在我的Andorid应用程序中存储产品列表。 所以,我收到一个produtc的列表,大约有3k个对象。 而我正试图将它们存储起来:

@Override
public void saveAll(List<ProductsDomain> domainProducts) throws InstantiationException, IllegalAccessException {
    Realm instance = getRealmInstance();

    RealmList<ProdutcsRealm> realmProducts = new RealmList<ProdutcsRealm>();
    try {
        ProdutcsRealm realmProduct = getClasseEntidadePersistencia().newInstance();
        for (ProductsDomain domainProduct : domainProducts) {
            fromDomainToPersistence(domainProduct, realmProduct);
            realmProducts.add(realmProduct);
        }
        instance.beginTransaction();
        instance.copyToRealm(realmProducts);// taking to long, 3k items
        instance.commitTransaction();

    } catch (Exception e) {
        e.printStackTrace();
        instance.cancelTransaction();
        return;
    }


}

所以,这个领域需要花费太多时间,比如20分钟。有人想知道更好的表现吗?

解决: 我发现了问题!我在所有迭代中使用相同的ProductsRealm实例。当您尝试将多个引用的列表保存到同一个对象时,看起来Realm不能正常工作。

1 个答案:

答案 0 :(得分:1)

如果您可以在fromDomainToPersistence()中将对象添加到您的领域,速度会更快。 saveAll()方法可能类似于:

public void saveAll(...) {
    Realm instance = getRealmInstance();
    try {
        instance.beginTransaction();
        for (ProductsDomain domainProduct : domainProducts) {
            fromDomainToPersistence(instance, domainProduct);
        }
        instance.commitTransaction();
    } catch (Exception e) {
        // ...
    }
}

public void fromDomainToPersistence(Realm r, DomainProduct domainProduct) {
     ProductRealm realmProduct = r.createObject(ProductRealm.class);
     // set the fields' values
}