2016-03-02 69 views
1

我注意到,在Java中第一次初始化RandomAccessFile对象要比后续初始化RandomAccessFile对象到磁盘上的同一文件要慢。有没有一些背景缓存,操作系统可以做到这一点?第一次RandomAccessFile初始化速度慢,后来快速

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

有没有人见过这样的事情?有没有解决方法?数据集可能包含100,000个图像,因此初始化一组虚拟对象可能不可行。

的初始化代码行很简单:

RandomAccessFile fileIn = new RandomAccessFile(abspath, "r");

+2

是的,操作系统缓存。 – Andreas

+0

@Andreas谢谢!只是要了解,它是什么缓存,有没有办法解决这个问题?也许使用'RandomAccessFile'以外的东西会做到这一点,或者这是I/O的一般问题? – ddukki

+1

如果绕过缓存,后续打开的文件将会像第一个文件一样慢,那么为什么要这么做呢?第一次打开文件时,缓存速度并不会降低,因为无需等待慢速硬盘读取数据,它可以提高重新打开文件的性能。 – Andreas

回答

3

是,操作系统缓存。

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

缓存在第一次打开文件时速度不会降低,它不需要等待慢速硬盘读取数据就可以提高重新打开文件的性能。

相关问题