Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 在领域存储长列表的对象最有效的方式是什么?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在试图将领域与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);
        }
    });
}

在大多数情况下,当保存的对象与原始对象不一样时,我所做的@R_197_9811@:

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 – 在领域存储长列表的对象最有效的方式是什么?所遇到的程序开发问题。

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。