2

我已经计划在德雷克的缓存中创建大量对象。现在,在计划之外,我运行lapply了这些对象的一个​​子集,以便总结它们的一些属性并计划我的下一步。

我正在使用readd在我正在应用的函数中加载这些缓存对象中的每一个,但是在我完成它们之后它们似乎仍然会占用 RAM。这在我的场景中是一个问题,因为它在完成时是 100 GiB 的 RAM。如果我需要明确删除它们,我不确定我应该在环境中的哪个位置寻找它们。

我知道德雷克正在做类似于缓存记忆的事情,因为如果我readd两次相同的对象,第一次需要时间从磁盘读取,第二次是瞬时的。但在这种情况下,我想将缓存视为一个简单的数据源,就像任何其他文件一样,这样一个对象就不会占用 RAM,如果它是rm()'d 或超出范围。

4

1 回答 1

1

弄清楚了!它看起来像storr返回的对象get_cachenew_cache具有flush_cache方法。然后调用它,gc()返回内存。

应该flush_cache记录在德雷克的某个地方,即使它来自 storr?

我还发现,如果我readd从多个进程调用mclapply,对象不会留在 RAM 中,因为它们不会被传输回主进程。

于 2019-05-30T22:36:45.260 回答