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 のサイズは約 5 mb ですが、pdf_textそれを呼び出すと約 20 倍の RAM が使用されます。なぜかわからない

4

2 に答える 2

1

これはメモリリークのように聞こえます。ただし、この問題を MacOS で再現することはできません。

これを追跡するための問題を開始しました。使用している pdftools と libpoppler のどのバージョンがこの動作を示しているかを報告していただけますか?

于 2019-06-22T22:08:19.483 に答える
0

グーグル経由でここにたどり着いた人にとって、これが私にとって問題を解決するものです-それはここでジェロエンの提案に基づいて構築されています

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 に答える