领域花费太长时间将对象复制到 RealmObject
Realm taking too long to copy objects to RealmObject
我正在使用领域在我的 Andorid 应用程序中存储产品列表。
因此,我收到了一个包含大约 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 似乎无法正常工作。
如果您可以将对象添加到 fromDomainToPersistence()
中的 Realm 中,将会更快。 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
}
我正在使用领域在我的 Andorid 应用程序中存储产品列表。 因此,我收到了一个包含大约 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 似乎无法正常工作。
如果您可以将对象添加到 fromDomainToPersistence()
中的 Realm 中,将会更快。 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
}