与在RStudio中使用saveRDS相关的时间问题
在执行循环之前调用saverd会导致循环计时不一致。这只有在使用RStudio时才明显;使用Rscript从命令行运行同一脚本时,不存在此问题。这可能是RStudio中I/O刷新延迟的结果与在RStudio中使用saveRDS相关的时间问题,r,rstudio,R,Rstudio,在执行循环之前调用saverd会导致循环计时不一致。这只有在使用RStudio时才明显;使用Rscript从命令行运行同一脚本时,不存在此问题。这可能是RStudio中I/O刷新延迟的结果 其他人注意到这种行为了吗 有没有办法在saveRDS调用后强制I/O刷新 在Ubuntu 18.04LTS 64位上使用RStudio 1.1.463、R3.5.2 我通过在代码执行之前调用gc()并使用gcinfo启用gc消息来确保没有触发gc,从而消除了垃圾收集器的问题。我还尝试用cmpfun预编译函
- 其他人注意到这种行为了吗
- 有没有办法在saveRDS调用后强制I/O刷新
loop.test <- function() {
t <- c()
t0 <- Sys.time()
for (i in 1:10) {
t <- c(t, Sys.time() - t0)
Sys.sleep(0.01)
}
dt <- round(1000 * diff(t), 1)
print(dt)
print(summary(dt))
}
saveRDS(1:10, 'garb.rds')
loop.test()
请注意,大延迟并不总是出现在同一次迭代中
删除代码中的saveRDS调用将始终产生一致(接近10毫秒)的循环计时
通过Rscript从命令行运行代码可以使用saveRDS行,也可以不使用saveRDS行。以下是RStudio的同事们的回应: 一种可能性是:RStudio在R“空闲”期间(即:当R调用R_ProcessEvents时)做一些后台工作,我认为项目文件索引就是其中之一。RStudio为这些任务注册文件监视器,因此创建文件可能会导致RStudio在幕后执行一些重新索引的工作 我验证了将saveRDS()调用中的save目录更改为项目目录之外会消除计时问题。所以我认为这支持了文件索引理论。rstudiov1.2预览版在较小程度上展示了这种行为,因此空闲处理实现中可能发生了一些变化,但我没有关于这方面的进一步信息。RStudio的人打开了一个bug报告来解决这个问题,所以希望很快就能得到修复 因此,目前的一些解决办法是:
以下是RStudio的同事们的回应: 一种可能性是:RStudio在R“空闲”期间(即:当R调用R_ProcessEvents时)做一些后台工作,我认为项目文件索引就是其中之一。RStudio为这些任务注册文件监视器,因此创建文件可能会导致RStudio在幕后执行一些重新索引的工作 我验证了将saveRDS()调用中的save目录更改为项目目录之外会消除计时问题。所以我认为这支持了文件索引理论。rstudiov1.2预览版在较小程度上展示了这种行为,因此空闲处理实现中可能发生了一些变化,但我没有关于这方面的进一步信息。RStudio的人打开了一个bug报告来解决这个问题,所以希望很快就能得到修复 因此,目前的一些解决办法是:
今天已尝试RStudio v1.2预览版。这个问题也存在,但程度要小得多。由于saveRDS的存在,迭代时间不是约275ms,而是约24ms。就此向RStudio提交了一份通知单。今天已尝试RStudio v1.2预览版。这个问题也存在,但程度要小得多。由于saveRDS的存在,迭代时间不是约275ms,而是约24ms。就此事向RStudio提交了一份通知单。
[1] 10.1 10.1 10.2 10.2 275.4 10.2 10.1 10.2 10.2
Min. 1st Qu. Median Mean 3rd Qu. Max.
10.10 10.10 10.20 39.63 10.20 275.40