2015-07-03 112 views
0

我正在使用领域在我的Andorid应用中存储产品列表。 所以,我收到了一个约3k物品的产品清单。 我试图将它们存储这样的:Realm花费太长的时间将对象复制到RealmObject中

@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

如果您可以将对象添加到您的领域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 
} 
+0

呀,你的方法是有效的,并解决问题。我为来自域的每个对象使用相同的实例。当我试图保存时,看起来像是Realm陷入死锁或其他事情。 –

相关问题