从BufferedStream获取磁盘访问次数

时间:2012-10-21 11:22:11

标签: c# bufferedstream disk-access

我正在使用BinaryReader读取二进制文件。我想用BufferedStream缓冲输入时计算磁盘访问次数。不幸的是这个类是密封的,所以我不能覆盖方法来手动计算它。

有没有办法使用标准库?或者我必须编写自己的缓冲BinaryReader来实现这一目标吗?

1 个答案:

答案 0 :(得分:1)

您可以从您在BufferedStream(Stream,int)构造函数中指定的缓冲区大小计算它。默认值为4096字节。假设您没有Seek(),则文件访问次数为(filesize + bufsize - 1) / bufsize

总的过度杀伤方法是要记住你可以链流。创建自己的Stream派生类,只计算需要从底层流提供数据的Read()方法的调用次数。将该类的实例传递给BufferedStream构造函数。

这两种方法都不能让您了解操作系统访问磁盘驱动程序的频率,并从磁盘中物理传输数据。文件系统缓存介于两者之间,实际数量很大程度上取决于文件数据在磁盘柱面和扇区之间的映射方式。您将从性能计数器获得有关该信息的信息。实际使用它没有什么意义,你获得的数字将很难在另一台机器上重现。