1

pdf_text()没有释放 RAM。每次运行该函数时,它都会使用更多 RAM,并且在 R 会话终止之前不会释放它。我在窗户上。

最小的例子

# This takes ~60 seconds and uses ~500mb of RAM, which is then unavailable for other processes

library(pdftools)
for (i in 1:5) {
  
  print(i)
  pdf_text("https://cran.r-project.org/web/packages/spatstat/spatstat.pdf")
  
}

我的问题

为什么要pdf_text()使用这么多内存,如何释放它?(无需终止 R 会话)

到目前为止我尝试过的

gc()在循环内尝试过

我已经检查过pdf_text()没有创建一些隐藏的对象(通过检查ls(all=TRUE)

我已经清除了 R 会话的临时文件

另请注意

尽管上面示例中特定 pdf 的大小约为 5mb,但调用pdf_text它会使用大约 20 倍的内存!我不知道为什么

4

2 回答 2

1

这听起来像是内存泄漏。但是我无法在 MacOS 上重现此问题。

我已经开始跟踪这个问题,您能否报告您正在使用哪个版本的 pdftools 和 libpoppler 显示此行为?

于 2019-06-22T22:08:19.483 回答
0

对于通过谷歌到达这里的任何人,这就是为我解决问题的方法 - 它建立在 Jeroen 的建议之上

pdf_urls <- c("https://cran.r-project.org/web/packages/ggplot2/ggplot2.pdf", 
              "https://cran.r-project.org/web/packages/dplyr/dplyr.pdf",
              "https://cran.r-project.org/web/packages/pdftools/pdftools.pdf")

pdfs <- list()

for(i in 1:length(pdf_urls)) {

  print(paste("Obtaining pdf", i, "of", length(pdf_urls)))
  pdf_url <- pdf_urls[i]

  pdfs[[i]] <- callr::r(function(pdf_path){
    pdftools::pdf_text(pdf_path)
  }, args = list(pdf_url))

}

于 2019-12-24T03:03:19.660 回答