我正在使用BinaryReader读取二进制文件。我想要计算使用BufferedStream缓冲输入时的磁盘访问次数。不幸的是,这个类是密封的,所以我不能重写方法来手动计算它。
有没有使用标准库的方法呢?或者我必须编写自己的缓冲BinaryReader才能做到这一点?
发布于 2012-10-21 21:30:15
您可以根据在BufferedStream(Stream,int)构造函数中指定的缓冲区大小来计算它。默认值为4096字节。假设您不使用Seek(),那么文件访问的次数就是(filesize + bufsize - 1) / bufsize。
一种完全夸张的方法是记住,您可以链式流。创建您自己的stream派生类,只计算需要从底层流提供数据的对Read()方法的调用次数。将该类的实例传递给BufferedStream构造函数。
这两种方法都不能让您了解操作系统访问磁盘驱动程序和从磁盘物理传输数据的频率。文件系统缓存位于两者之间,实际数量在很大程度上取决于文件数据在磁盘柱面和扇区之间的映射方式。您可以从性能计数器获取有关这方面的信息。实际使用它几乎没有什么意义,你得到的数字在另一台机器上的重现效果很差。
https://stackoverflow.com/questions/12997338
复制相似问题