基准显示以下结果.如图所示,领域比Snappydb慢100-200倍.
我正在做的是先创建10,000个对象,然后将它们存储到数据库中.所以,在我的代码中,我以这种方式存储一个Booking对象(有一个循环遍历10,000次):
public voID storeBooking(final Booking booking) { mRealm.executeTransaction(new Realm.Transaction() { @OverrIDe public voID execute(Realm realm) { Booking realmBooking = realm.createObject(Booking.class); realmBooking.setID(booking.getID()); realmBooking.setCode(booking.getCode()); realmBooking.setfareLowerBound(booking.getfareLowerBound()); realmBooking.setfareUpperBound(booking.getfareUpperBound()); realmBooking.setPhoneNumber(booking.getPhoneNumber()); realmBooking.setPickUpTime(booking.getPickUpTime()); realmBooking.setRequestedTaxiTypename(booking.getRequestedTaxiTypename()); realmBooking.setTaxiTypeID(booking.getTaxiTypeID()); } }); }
任何想法将不胜感激.谢谢.
更新
这是用于存储Booking对象的Snappydb方法.
public voID storeBooking(final String key,final Booking booking) { try { mSnappyDb.put(key,booking); } catch (SnappydbException e) { e.printstacktrace(); } }
更新
使用insertOrUpdate()方法和一个事务的新结果
解决方法 您的原始解决方案可以在10000个事务中保存10000个对象,并为其创建10000个对象,这几乎是最糟糕的可能方法.技术上正确的方法应该是:
public voID storeBookings(final List<Booking> bookings) { mRealm.executeTransaction(new Realm.Transaction() { @OverrIDe public voID execute(Realm realm) { realm.insertOrUpdate(bookings); } });}
在大多数情况下,当保存的对象与原始对象不一样时,我所做的是这样的:
public voID storeBookings(final List<Booking> bookings) { mRealm.executeTransaction(new Realm.Transaction() { @OverrIDe public voID execute(Realm realm) { RealmBook realmBook = new RealmBook(); for(Booking booking : bookings) { realmBook = mapper.toRealm(booking,realmBook); // does not create new instance realm.insertOrUpdate(realmBook); } } });}
此解决方案使用1个分离对象来映射列表的内容.
总结以上是内存溢出为你收集整理的android – 在领域存储长列表的对象最有效的方式是什么?全部内容,希望文章能够帮你解决android – 在领域存储长列表的对象最有效的方式是什么?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)