我想尽可能快地复制文件(最好在 C# 中)。并且想知道 - 由于磁盘映像不只是复制所有驱动器(否则它总是与驱动器的容量一样大) - 为什么它比复制文件快得多?
即使在 C# 中无法达到这种速度,我也在尝试理解这个主题。
我想尽可能快地复制文件(最好在 C# 中)。并且想知道 - 由于磁盘映像不只是复制所有驱动器(否则它总是与驱动器的容量一样大) - 为什么它比复制文件快得多?
即使在 C# 中无法达到这种速度,我也在尝试理解这个主题。
从磁盘检索单个文件的工作方式如下(大大简化):
1) 操作系统向磁盘发送文件请求。
2) 磁盘找到文件。
3)磁盘将文件的副本发送回操作系统。
然而,关键点是,如果您要检索多个文件,则对每个文件连续重复整个过程。 所以如果你想从磁盘上抓取一千个文件,操作系统会发送一个请求,等待,获取文件,发送另一个请求,等待,获取文件,重复一千次。这是很多开销,尤其是对于小文件。
另一方面,磁盘映像根本不关心单个文件。它询问磁盘上的文件表在哪里有数据,然后从磁盘中逐位复制这些填充的整个部分。每个部分都是一个大要求。无需对单个文件进行串行请求。
快速的 Google 搜索将我引导到 Win32 API 函数CreateFile
(具体参见“物理磁盘和卷”部分)作为在 C# 中处理此问题的最佳选择 - 但如果有特定于 .NET 的成像方式,我还没有看到它。