我正在使用BinaryReader
. 我想在缓冲输入时计算磁盘访问次数BufferedStream
。不幸的是,这个类是密封的,所以我不能重写方法来手动计算它。
有没有办法使用标准库来做到这一点?还是我必须编写自己的缓冲 BinaryReader 来实现这一点?
我正在使用BinaryReader
. 我想在缓冲输入时计算磁盘访问次数BufferedStream
。不幸的是,这个类是密封的,所以我不能重写方法来手动计算它。
有没有办法使用标准库来做到这一点?还是我必须编写自己的缓冲 BinaryReader 来实现这一点?
您可以根据在 BufferedStream(Stream, int) 构造函数中指定的缓冲区大小来计算它。默认值为 4096 字节。假设您不使用 Seek(),则文件访问次数为(filesize + bufsize - 1) / bufsize
.
一个完全矫枉过正的方法是记住你可以链接流。创建您自己的 Stream 派生类,并计算需要从底层流提供数据的 Read() 方法的调用次数。将该类的实例传递给 BufferedStream 构造函数。
这两种方法都无法让您了解操作系统访问磁盘驱动程序并从磁盘物理传输数据的频率。文件系统缓存介于两者之间,实际数量很大程度上取决于文件数据在磁盘柱面和扇区之间的映射方式。您会从性能计数器获得有关此信息。实际使用它没有什么意义,你得到的数字在另一台机器上重现效果很差。