我想在R中测量我的峰值内存使用量,以便我可以适当地分配资源。方法必须包含分析过程中创建的中间对象。例如,mx
是在lapply
的每个循环中创建的80Mb对象,但从未保存为全局变量。内存使用峰值应至少高于基线80Mb。
gc(reset = TRUE)
sum(gc()[, "(Mb)"]) # 172Mb
lapply(1:3, function(x) {
mx <- rnorm(1e7) # 80Mb object
mean(mx)
})
sum(gc()[, "(Mb)"]) # still 172Mb!
3条答案
按热度按时间huwehgph1#
我在
peakRAM
包中找到了我要找的东西。关于documentation:这个软件包可以轻松地监视使用的总RAM和峰值RAM,以便开发人员可以快速识别和消除占用RAM的代码。
bhmjp9jg2#
您可以使用
gc
函数来实现。实际上,
gc
函数提供了字段11和12中使用的当前和最大内存(在文档中为Mb
,但在我的机器上实际使用的是Mio
)。您可以通过参数**reset=TRUE
**重置最大值。下面是一个例子:在本例中,我们可以看到GC在
runif
调用周围的两个gc调用之间分配了最多516.9 - 4.9 = 512 Mb
(这与预期结果一致)。frebpwbc3#
lapply
返回的对象只有488个字节,因为它是总结的:垃圾收集在平均值计算后删除了中间对象。help('Memory')
给出了关于R如何管理内存的有用信息。特别是,你可以使用
object.size()
来跟踪单个对象的大小,使用memory.size()
来了解每一步总共使用了多少内存:创建于2020-08-20由reprex package(v0.3.0)
如果不是返回
mean
,而是返回整个对象,则内存使用的增加是显著的。