【问题标题】:Is there anyway I can check which R objects takes too much memory? [duplicate]无论如何我可以检查哪些 R 对象占用了太多内存? [复制]
【发布时间】:2017-05-04 18:10:35
【问题描述】:

现在我正在使用 R 来整合不同的股票信息(例如用于 Web 信息的 RCurl 和用于财务报告和交易信息的 quantmod)

获得数据后,我将它们放入 MySQL 数据库中。

程序在循环后发现但 R 会话消耗了太多内存(大约 1000 只股票需要 4GB 内存)

在 R 中我是否可以检查哪些对象占用的内存最多?或者有什么工具可以检查可能的内存泄漏问题吗?谢谢!

【问题讨论】:

  • 你是否在循环中增长一个对象?
  • 是的,循环中的基本逻辑是:下载html代码,解析并提取我想要的值,将其加载到一个对象中,然后将其写入mysql。

标签: mysql r memory-leaks web-scraping


【解决方案1】:

好主意。我鼓励您在 http://adv-r.had.co.nz/memory.html 上查看 Hadley Wickham 关于 R 内存使用的文章。几点说明:

  • 您可以使用pryr 包中的函数object_size(x) 查找对象大小
  • 您可以使用 pryr 包中的mem_used() 找到内存中所有对象的总大小
  • 有一个名为 lineprof 的很棒的包(现在不推荐使用 profvis),它允许您查看代码每一行的内存使用情况。

希望对你有帮助。

【讨论】:

  • 感谢 jean 和其他人,我已经阅读了您之前提供的所有参考资料,这很有帮助。由于我使用 XML 包来解析 html 代码,它似乎是最可疑的一个!根据建议,我使用 xml2 包来替换 XML,它几乎工作得很好,它大大降低了内存消耗。可能内存占用增长率较低是其他原因造成的。
  • 我正在使用 xml2::read_html 替换 RCurl::getURL;使用 xml_find_all 替换 XML::getNodeSet(这似乎是最可疑的函数导致内存泄漏)。然后使用 xml_remove(x, free = TRUE) 显式释放内存。希望这会有所帮助。
猜你喜欢
  • 2014-09-20
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-22
  • 2017-04-14
相关资源
最近更新 更多