我的应用程序使用一个非常大的文件,并在一个小窗口内从各种偏移量执行许多非常小的读取.我将直接文件读取替换为通过BufReader
读取.然后我用进程监视器(来自Sysinterals套件)判断了操作系统执行的实际读取操作,似乎根本没有缓冲任何内容.更糟糕的是,它现在每次都读取整个缓冲区容量,这使得性能变得更差.
播放:
use std::fs::File;
use std::io::{BufReader, Read, Seek, SeekFrom};
fn main() {
let path = "data.bin";
let f = File::open(path).unwrap();
let mut r = BufReader::with_capacity(8 * 1024, f);
let mut buf = [0; 8];
r.seek(SeekFrom::Start(0)).unwrap();
r.read(&mut buf).unwrap();
r.seek(SeekFrom::Start(100)).unwrap();
r.read(&mut buf).unwrap();
r.seek(SeekFrom::Start(200)).unwrap();
r.read(&mut buf).unwrap();
}
在这种情况下,我应该如何使用BufReader
?