Функция 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))
}