如何测量文件(硬盘)I / O的特性?

时间:2011-01-28 20:26:27

标签: c# .net windows file-io

如何衡量文件(硬盘)I / O的特性?例如,在具有硬盘(速度为X)和cpu i7(或任意数量的内核)和Y量的ram(使用Z Hz BIOS)的机器上(在Windows操作系统上):

  • 可以并行写入HD的最佳文件数量?
  • 可以从HD并行读取的最佳文件数量?
  • 文件系统的设施帮助更快的写作。 (比如:是否有一个功能或工具可以让你在不同的扇区(或硬盘)上编写批量的二进制数据,然后将它们绑定为一个文件?我对操作系统中的底层文件I / O知之甚少。但它会合理拥有这样的工具!)
  • 如果之前有这样的工具,那么.NET也有吗?

我想尽可能快地(和并行)写大文件(通过网络或其他来源流式传输)!我在C#编码。它就像一个下载管理器;所以如果流媒体被中断,它可以继续进行。

1 个答案:

答案 0 :(得分:3)

答案(通常如此)取决于您的使用情况。整个操作系统是不同使用场景之间的一个重要权衡。对于NTFS文件系统,可以提到块大小设置为4k,NTFS存储文件小于MTF中的块大小,文件大小,文件数量,碎片等。

如果您打算编写大文件,则块大小为64k可能会很好。那就是你计划读取大量数据。如果您读取的数据量较小,那么较小的数据就是好的。操作系统工作在4k页,所以4k是好的。压缩(和加密?)以及SQL和Exchange仅适用于4k页(iirc)。

如果您编写小文件(< 4k),它们将被存储在MFT中,因此您不必进行“ekstra jump”。这在写操作中特别有用(读取可能有MFT缓存)。 MFT按顺序存储文件(即块1000-1010,2000-2010),因此碎片将使MFT更大。以并行方式将文件写入磁盘是导致碎片化的主要原因之一,另一种是删除文件。您可以预先为文件分配所需的大小,Windows将尝试在磁盘上找到合适的位置来对抗碎片。还有像O&O Defrag这样的实时碎片整理程序。

Windows将二进制流直接映射到磁盘上的物理位置,因此使用不同的读/写方法不会产生与其他因素一样多的性能提升。对于最大速度程序,请使用technieue将直接内存映射到磁盘。见http://en.wikipedia.org/wiki/Memory-mapped_file

Windows(在“设备管理器”,“硬盘”下)中有一个选项可以增加磁盘上的缓存。这很危险,因为如果计算机蓝屏或断电,ut可能会损坏文件系统,但在写入较小的文件(以及所有写入)时会大大提高性能。如果磁盘正忙,这将特别有价值,因为寻道时间会减少。 Windows使用所谓的电梯算法,这基本上意味着它可以在表面上来回移动硬盘磁头,为其正在移动的方向提供服务。

希望这会有所帮助。 :)