繁体   English   中英

领域限制查询结果

[英]Realm limit query results

我是Realm的新手,我已经看到了关于限制领域查询的答案 (在很多其他地方)。

我的问题是,当数据量变大时,以下代码花费太长时间将数据加载到数组中:

RLMResults* rlm = [[Item class] objectsWithPredicate:predicate]; // this loads fast
NSArray* results = [rlm valueForKey:@"self"]; // this is slow

据我所知使用的谓词太多,所以我想限制结果就像我不能限制结果这个例子中的境界网站,如下所示:

RLMResults* rlm = [[Item class] objectsWithPredicate:predicate]; // this loads fast
NSMutableArray* results = [@[] mutableCopy];

for (NSInteger i = 0; i < 5; i++) {
    Item* item = rlm[i]; // only the first call (when i == 0) is slow here
    [results addObject:item];
}

所以有趣的是,只有第一次调用rlm [i](rlm [0])需要很长时间,然后(当i> 0时)调用工作很快。

难道我做错了什么? 或者有没有办法更快地加载大量数据或限制结果?

非常感谢!

就像它在Realm文档中所说的那样, RLMResults的内容是延迟加载的。 它是为了尝试推迟“预加载”任何东西,直到绝对必要。 当你遍历每个对象并将其添加到NSArray ,这会迫使每个对象延迟加载,这将(可以理解)导致性能损失。 也可能是大量的谓词查询也在懒惰地执行,这就是为什么在访问结果集中的第一个对象时获得性能RLMResults ,而不是在创建RLMResults对象时。

如果您认为这样做会导致性能下降是不可接受的,您可能需要考虑尝试不同的方法。 例如,不是将对象复制到NSArray ,而是使用RLMResults对象,并使用RLMResults对象仅跟踪NSRange对象。 此外,由于只有初始加载速度很慢,我还建议您尝试优化谓词查询,例如,确保您搜索的每个属性都已标记为已建立索引。

如果情况变得更糟,有时长时间的性能命中无法帮助,如果是这种情况,您可以通过将其卸载到后台线程来缓解任何UI冻结。

我希望有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM