第一个RandomAccessFile初始化缓慢,随后很快

时间:2016-03-02 23:44:48

标签: java io randomaccessfile

我注意到Java中library(dplyr) DF1 = data.frame(x=c(10,5), y=c('s','h')) DF2 = data.frame(x=c(11,5,5), z=c('h', 's', 'h'), y = c('h','s','s')) DFlist <- list(DF1, DF2) colsKeep <- c('x', 'y') xRange <- 1:5 yVal <- 's' lapply(DFlist, function(x){x %>% select(one_of(colsKeep)) %>% filter(x %in% xRange & y == yVal)}) 对象的第一次初始化比后续初始化RandomAccessFile对象到磁盘上的同一文件要慢得多。是否有一些后台缓存操作系统可以实现这一点?

例证:我正在从磁盘加载图像并允许用户翻阅它们。我希望瓶颈是图像的显示,但是在第一次加载时,瓶颈是加载图像(使用JProfiler发现瓶颈;每次调用RandomAccessFile ~8ms)。如果我翻回我已经查看过的图片,对RandomAccessFile<Init>的调用只有几微秒。

有没有人见过这样的东西?有没有解决方法?数据集可能包含100,000个图像,因此初始化一堆虚拟RandomAccessFile<Init>对象可能不可行。

初始化的代码行是:

RandomAcessFile

1 个答案:

答案 0 :(得分:3)

是的,操作系统缓存。

如果绕过操作系统缓存,后续打开的文件将与第一个一样慢,那么为什么要这样呢?

第一次打开文件时缓存并没有减慢,它不会等待慢速硬盘驱动器读取数据,从而提高了重新打开文件的性能。