大型数据集的异步读取方法

时间:2016-07-04 00:29:39

标签: xamarin realm

好的,所以Realm(.NET)不支持其当前版本的异步查询。 如果某个RealmObject的基础表包含大量记录,比如数十万或数百万,那么首选方法是什么(鉴于目前没有异步限制)?

我目前的选择(迄今为止没有测试过):

  1. 在UI线程上使用Realm.GetInstance().All<T>并过滤它(然后枚举IEnumerable)。我的假设是UI线程将阻止等待这种可能的冗长操作。
  2. 在工作线程上执行上一个操作。缺点是所有RealmObject's都需要映射到某个辅助域模型(甚至是相同的模型,但与Realm断开连接),因为不能在线程之间共享/编组领域对象。
  3. 是否有任何推荐的方法(当然是由Realm创建者)?我知道这并不完全适合这个网站的问题模型,但也是如此。

1 个答案:

答案 0 :(得分:2)

Realm枚举器真的很懒惰,而All<T>是另一个特例,所以在UI线程上肯定足够快。

即使查询速度如此之快,我们建议大多数人在UI线程上执行查询。

为了扩大我对这个问题的评论,RealmObject子类在编译时是编织,属性getter和setter被映射为直接调用C ++核心,获取内存映射数据。< / p>

可以快速保持线程之间的更新,并提供令人难以置信的列扫描速度。大多数情况下需要索引,也不需要在不同的线程上运行。

如果你创建一个独立 RealmObject子类,例如:new Dog()它有一个标志IsManaged==false,这意味着getter和setter方法仍然使用支持字段,如由编译器。

如果您使用CreateObject创建对象,或者您使用Realm.Manage然后IsManaged==true独立进入领域,则会忽略支持字段。