我注意到,在Java中第一次初始化RandomAccessFile
對象要比後續初始化RandomAccessFile
對象到磁盤上的同一文件要慢。有沒有一些背景緩存,操作系統可以做到這一點?第一次RandomAccessFile初始化速度慢,後來快速
案例:我從磁盤加載圖像並允許用戶翻閱它們。我希望瓶頸是圖像的顯示,但在第一次加載時,瓶頸是加載圖像(使用JProfiler發現瓶頸;每次調用RandomAccessFile<Init>
〜8ms)。如果我翻閱了我已經查看過的圖像,對RandomAccessFile<Init>
的調用只有幾微秒。
有沒有人見過這樣的事情?有沒有解決方法?數據集可能包含100,000個圖像,因此初始化一組虛擬對象可能不可行。
的初始化代碼行很簡單:
RandomAccessFile fileIn = new RandomAccessFile(abspath, "r");
是的,操作系統緩存。 – Andreas
@Andreas謝謝!只是要了解,它是什麼緩存,有沒有辦法解決這個問題?也許使用'RandomAccessFile'以外的東西會做到這一點,或者這是I/O的一般問題? – ddukki
如果繞過緩存,後續打開的文件將會像第一個文件一樣慢,那麼爲什麼要這麼做呢?第一次打開文件時,緩存速度並不會降低,因爲無需等待慢速硬盤讀取數據,它可以提高重新打開文件的性能。 – Andreas