微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从大型 RealmCollection 中获取一小部分项目的最佳方法是什么?

如何解决从大型 RealmCollection 中获取一小部分项目的最佳方法是什么?

我目前正在使用 Realm 5.1.2 开发 Xamarin.Forms 项目。我需要获取 RealmObject 的集合,将它们过滤成一个较小的集合,然后将它们转换为 UI 元素以显示基于每个项目的数据。在较小的数据集上,我的实现效果很好。但是,当尝试使用大型数据集(1,000,000 多个项目开始,筛选到约 1000 个)执行此操作时,应用在尝试转换筛选对象时会显着降低速度。

到目前为止,我已尝试通过将过滤过程包含在 IQueryables 和 IRealmCollection 中来解决此问题。我知道在我的最终结果中实例化所有对象会导致速度变慢。我希望添加一个延迟加载方法,因为不是每个元素一次都可见(一次只加载 10 个,并根据需要请求更多)。我目前的实现是:

创建 RealmCollection 一次:

var filteredRealmCollection = localRealm.All<Field>()
    .Where(field => field.IndexedId == input.TargetIndexId)  //Use indexed parameter for initial filter
    .Where(field => field.Value == input.TargetValue)  //Take all fields that match the requested filter value
    .AsRealmCollection();

根据需要调用新项目:

IEnumerable<FieldItemviewmodel> GetFieldItemviewmodels(int numberToSkip,int numberToTake)
{
    return filteredRealmCollection
        .Skip(numberToSkip)
        .Take(numberToTake)
        .Select(field => new FieldItemviewmodel(field)
}

RealmCollection 的创建运行得很好,如果我等待整个列表实例化,它就会有正确的值。调用 GetFieldItemviewmodels 也可以正常工作。但是当我尝试实际使用返回的 IEnumerable 时,该应用程序会冻结,直到它实例化整个 FilterRealmCollection。我还尝试使用 RealmCollection[index] 来获取项目的子集,结果相似。

有没有办法只实例化我使用 RealmCollection 请求的项目,以便我只加载 10 个项目而不是大约 1000 个?如果没有,是否有不同的方法来完成我在这里尝试做的事情?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。