从RAM中删除已加载的Drake缓存对象

时间:2019-05-30 21:01:50

标签: r drake-r-package

我已经制定了一个计划,在drake的缓存中创建大量对象。现在,在计划之外,我在这些对象的子集上运行了lapply,因此我可以总结它们的一些属性并计划下一步。

我正在使用readd将这些缓存的对象中的每一个加载到我要应用的函数中,但是在用完它们之后,它们似乎仍在消耗RAM。在我的方案中,这是一个问题,因为到完成时,它已经是100 GiB的RAM。我不确定如果需要显式删除它们,我应该在环境中的哪个位置查找它们。

我知道drake在做与缓存的记忆类似的事情,因为如果我两次readd同一对象,则第一个需要时间从磁盘读取,而第二个是瞬时的。但是在这种情况下,我想像对待任何其他文件一样将缓存视为简单的数据源,以便对象经过rm()或超出作用域时不会占用RAM。

1 个答案:

答案 0 :(得分:1)

想通了!看起来storrget_cache返回的new_cache对象具有flush_cache方法。依次调用,然后gc(),返回内存。

即使flush_cache来自storr,也应该在雄蜂的某个地方进行记录吗?

我还发现,如果我使用readd从多个进程中调用mclapply,则对象不会停留在RAM中,因为它们不会转移回主进程。