【发布时间】:2019-05-29 13:37:08
【问题描述】:
我需要删除一个全局变量并从 R 函数内部释放它正在使用的内存,但我尝试过的所有选项都不起作用。
我已经尝试了带有envir参数的rm函数,然后是gc,但是gc并没有释放内存。我还尝试使用 eval+envir 在全局环境中运行 gc。
library(data.table)
DT = data.table(col1 = 1:1e6)
cols = paste0('col', 2:100)
for (col in cols){ DT[, col := 1:1e6, with = F] }
rm_and_release <- function(dt){
dt <- dt[sample(1e6, 9e5, FALSE)]
print(gc())
rm(DT, envir = globalenv())
print(gc())
}
rm_and_release(DT)
结果如下
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 661556 35.4 1168576 62.5 1143443 61.1
Vcells 96303112 734.8 146725516 1119.5 146722586 1119.5
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 661569 35.4 1168576 62.5 1143443 61.1
Vcells 96303114 734.8 146725516 1119.5 146722586 1119.5
我预计第二个 gc() 会释放更多内存,因为此时只有一个数据集,因为全局 DT 已被删除。
我需要释放函数内部的 RAM,因为该函数会生成更多数据集并且内存不足。
【问题讨论】: