从大型 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 (将#修改为@)