问题描述
我目前正在使用 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 (将#修改为@)