gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 11:38:55 32 4
gpt4 key购买 nike

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

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

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

最佳答案

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

如果您打算写入大文件,那么 64k 的 block 大小可能比较合适。也就是说,如果您打算读取大量数据。如果您读取的数据量较小,则较小的尺寸会很好。操作系统以 4k 页工作,所以 4k 很好。压缩(和加密?)以及 SQL 和 Exchange 仅适用于 4k 页面 (iirc)。

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

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

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

希望这对您有所帮助。 :)

关于c# - 如何测量文件(硬盘)I/O 的特性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4832732/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com