【问题标题】:Getting number of disk accesses from BufferedStream从 BufferedStream 获取磁盘访问次数
【发布时间】:2012-10-21 11:22:10
【问题描述】:

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

有没有使用标准库的方法?还是我必须编写自己的缓冲 BinaryReader 来实现这一点?

【问题讨论】:

  • 数据可以缓存在用户空间、操作系统、磁盘控制器中。我认为您只能粗略估计一下
  • @L.B:好的,假设每次重新填充缓冲区都是一次磁盘访问。那么这个怎么算呢?

标签: c# bufferedstream disk-access


【解决方案1】:

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

记住,您可以链接流,这完全是一种矫枉过正的方法。创建您自己的 Stream 派生类,并计算需要从底层流提供数据的 Read() 方法的调用次数。将该类的实例传递给 BufferedStream 构造函数。

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

【讨论】:

  • 就是这样的思维方式,我一直在寻找!效果很好。在演示各种合并排序算法时,我将在我的学术项目中使用它来模拟使用硬盘驱动器上的页面。所以这个解决方案已经足够好了。
猜你喜欢
  • 2020-03-31
  • 2013-02-07
  • 2010-10-20
  • 2011-05-23
  • 2014-12-21
  • 2011-11-28
  • 2021-03-29
  • 2012-06-27
  • 2011-09-11
相关资源
最近更新 更多