2012-10-21 49 views
2

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

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

+2

数据可以缓存在用户空间,操作系统,磁盘控制器中。我认为你可以得到一个粗略的估计 –

+0

@ L.B:好的,让我们假设每个缓冲区的重新填充都是一个磁盘访问。那么如何计算这个? – dulek

回答

1

您可以根据您在BufferedStream(Stream,int)构造函数中指定的缓冲区大小来计算它。默认值是4096字节。假设你不搜索(),文件访问的数量是(filesize + bufsize - 1)/bufsize

总的来说,矫枉过正的方法是记住你可以链接流。创建您自己的Stream派生类并只计算需要从基础流提供数据的Read()方法的调用次数。将该类的实例传递给BufferedStream构造函数。

这两种方法都不能让您找出操作系统多久访问磁盘驱动程序并从磁盘物理传输数据。文件系统缓存位于两者之间,实际数量很大程度上取决于文件数据如何映射到磁盘柱面和扇区。你会从性能计数器获得有关这方面的信息。实际使用它几乎没有意义,你得到的数字在另一台机器上将很难再现。

+0

这就是我在寻找的思维方式!很有效。 在演示各种合并排序算法时,我将在我的学术项目中使用它来模拟硬盘上的页面。所以这个解决方案已经足够了。 – dulek