0
我遇到了一个问题,我需要列举相对较大的数据集(> 7,000项)上的RLMResults集合。我得到这个领域懒惰地加载它的对象,因为他们被访问,但我遇到的问题是,我需要访问集合中的每一个这些项目,导致7,000+项目中的每一个被加载到内存中,从而导致超出内存错误。根据领域文档,他们不支持限制查询结果。在大型数据集上使用RLMResults快速枚举
我可能需要做的事情的一个例子是从文件系统中删除文件,而且我可以使用谓词进行查询,并且只询问被缓存的项目,但在最坏的情况下,查询可以返回库中的所有项目。
RLMResults<DLLibrary *> *allItems = [DLLibrary allObjects];
for(DLLibrary *item in allItems) {
// My understanding is that once the realm object is ready, it will be
// lazily loaded into memory. If I have many 1,000's of items in my data
// store this quickly becomes a problem memory wise.
if(item.isCached) {
[[DLCacheService instance] deleteCachedFileWithDocumentId:item.id];
}
}
很高兴看到一些代码或有一个更清晰的想法是怎么回事。为什么你需要访问每个对象,一旦你访问它,你在做什么? –
这实际上只是一个RLMResults <>集合的简单的for-in循环。在我的情况下,我从服务器检索更新的数据集,然后需要检查需要删除的项目(例如,检查当前项目ID是否在服务器返回的数据集中,如果不是,则删除领域中的对象),但不管我在做什么,它可能是我需要在每个对象上执行的计算。只是想看看别人可能做了什么,或者可能是我错过了一些东西。 –
它是懒加载的,所以你可以做什么而不是for_in实际上是为你“分页”的项目。你可以做100次{做事}并释放一些内存,然后重复这个循环,直到你处理了所有的领域对象。只要你不访问对象列表中的对象,它就不会真正在内存中。 – Kalzem