也許你可以gc()
根據observe
陳述與invalidateLater
?也許你可以限制每個會話的一些內存閾值或一些超時如果可以通過?您可以在下面看到您爲每個會話記憶了多少內存。另外,也要看看你的任務管理器在這個過程中有多少需要在方法(注:目前例如需要每個會話約440Mb
)
rm(list = ls())
library(shiny)
cleanMem <- function(n=10) { for (i in 1:n) gc() }
runApp(list(
ui = fluidPage(
tableOutput('foo')
),
server = function(input, output,session) {
observe({
# periodically collect
invalidateLater(1000,session)
cleanMem()
})
x1 <- 1:100000000
x2 <- rbind(mtcars, mtcars)
env <- environment() # can use globalenv(), parent.frame(), etc
output$foo <- renderTable({
data.frame(
object = ls(env),
size = unlist(lapply(ls(env), function(x) {
object.size(get(x, envir = env, inherits = FALSE))
}))
)
})
}
))
這個答案是非常有用和示例工作完全一樣我想我的代碼通過釋放工作up內存。但是,當我將示例應用於我的代碼時,它不釋放內存。我現在知道它應該如何工作,這是對我的理解,爲什麼它不是這樣工作的!我會看看我是否可以在這裏發佈我的代碼示例。 – rfguy