android – 在领域存储长列表的对象最有效的方式是什么?

android – 在领域存储长列表的对象最有效的方式是什么?,第1张

概述我正在试图将领域与Snappydb进行比较(对于那些想要看基准的人来说,这是 This is my repo).我想我的方式是错误的,因为存储到db的时间在与Sanppydb相比在Realm中花费了很长时间. 基准显示以下结果.如图所示,领域比Snappydb慢100-200倍. 我正在做的是先创建10,000个对象,然后将它们存储到数据库中.所以,在我的代码中,我以这种方式存储一个Booking 我正在试图将领域与Snappydb进行比较(对于那些想要看基准的人来说,这是 This is my repo).我想我的方式是错误的,因为存储到db的时间在与Sanppydb相比在Realm中花费了很长时间.

基准显示以下结果.如图所示,领域比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 – 在领域存储长列表的对象最有效的方式是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1132724.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存