我已经制定了一个计划,在drake的缓存中创建大量对象。现在,在计划之外,我在这些对象的子集上运行了lapply
,因此我可以总结它们的一些属性并计划下一步。
我正在使用readd
将这些缓存的对象中的每一个加载到我要应用的函数中,但是在用完它们之后,它们似乎仍在消耗RAM。在我的方案中,这是一个问题,因为到完成时,它已经是100 GiB的RAM。我不确定如果需要显式删除它们,我应该在环境中的哪个位置查找它们。
我知道drake在做与缓存的记忆类似的事情,因为如果我两次readd
同一对象,则第一个需要时间从磁盘读取,而第二个是瞬时的。但是在这种情况下,我想像对待任何其他文件一样将缓存视为简单的数据源,以便对象经过rm()
或超出作用域时不会占用RAM。
答案 0 :(得分:1)
想通了!看起来storr
或get_cache
返回的new_cache
对象具有flush_cache
方法。依次调用,然后gc()
,返回内存。
即使flush_cache
来自storr,也应该在雄蜂的某个地方进行记录吗?
我还发现,如果我使用readd
从多个进程中调用mclapply
,则对象不会停留在RAM中,因为它们不会转移回主进程。