Функция pdf_text не освобождает оперативную память (в Windows)

pdf_text() не освобождает ОЗУ. Каждый раз, когда функция запускается, она использует больше оперативной памяти и не освобождает ее до тех пор, пока не завершится сеанс 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 в приведенном выше примере составляет около 5 МБ, pdf_text он использует в 20 раз больше оперативной памяти! Я не уверен почему

1 ответ

Решение

Это звучит как утечка памяти. Однако я не могу воспроизвести эту проблему на MacOS.

У меня возникла проблема, чтобы отследить это, не могли бы вы сообщить, какие версии pdftools и libpoppler, которые вы используете, показывают это поведение?

Для тех, кто приезжает сюда через Google, вот что решает проблему для меня - это основано на предложении Джеруна здесь

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))

}

Другие вопросы по тегам