热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

使用data.table进行内存分析

如何解决《使用data.table进行内存分析》经验,您有什么比较好的解决方法?

在包含对data.table函数调用的R代码中分析内存的正确方法是什么?假设我要确定表达式期间的最大内存使用量。

该参考文献表明Rprofmem可能不是正确的选择:https : //cran.r-project.org/web/packages/profmem/vignettes/profmem.html

记录通过R的本机API的本机allocVector3()部分完成的所有内存分配,这意味着几乎所有的内存分配都被记录。R的垃圾收集器会在某些时候自动释放所有以这种方式分配的对象。profmem()不会记录垃圾收集事件。未记录的分配是由非R本机库或将内部代码Calloc()/ Free()用于内部对象的R包完成的分配。R垃圾收集器不处理此类对象。

data.table源代码包含对的大量调用Calloc()malloc()因此这表明这Rprofmem将无法衡量data.table函数分配的所有内存。如果Rprofmem不是正确的工具,那么Matthew Dowle怎么在这里使用它:R:循环遍历data.table中的列?

我发现了一个参考文献,提出了类似的潜在问题gc()(可用于测量两次调用之间的最大内存使用量gc()):https : //r.789695.n4.nabble.com/Determining-the-maximum-memory-usage -of-a-function-td4669977.html

gc()是一个好的开始。在任务执行之前调用gc(reset = TRUE),在执行任务之后调用gc(),您会在此期间看到R占用的最大额外内存。(这不包括编译后的代码分配的内存,这在重新使用时很难测量。)

我没有发现任何暗示存在类似问题Rprof(memory.profiling=TRUE)。这是否意味着即使不总是使用R API分配内存,该Rprof方法data.table仍然适用?

如果Rprof(memory.profiling=TRUE)实际上不是该工作的正确工具,那是什么?

ssh.utils::mem.usage工作吗?


推荐阅读
author-avatar
fengzi199171
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有