为什么磁盘映像如此之快?

时间:2015-07-27 18:10:09

标签: c# .net performance diskimage

我想尽快复制文件(最好是在C#中)。并且想知道 - 因为磁盘映像只是复制所有驱动器(否则它将始终与驱动器的容量一样大) - 为什么它是很多比复制文件更快?

我试图理解这个主题,即使在C#中无法达到这个速度。

1 个答案:

答案 0 :(得分:1)

从磁盘检索单个文件的工作原理如下(大大简化):

1)OS向磁盘发送文件请求。

2)磁盘找到该文件。

3)磁盘将文件的副本发送回操作系统。

然而,关键点在于,如果您想要检索多个文件,则整个过程会针对每个文件连续重复因此,如果您想要从磁盘中获取一千个文件,操作系统将发送请求,等待,获取文件,发送另一个请求,等待,获取文件,重复一千次。这是一个很大的开销,特别是对于小文件。

另一方面,磁盘映像并不关心单个文件。它询问磁盘上有文件的文件表,然后逐位复制磁盘上的整个填充部分。每个部分都是一个很大的要求。不要为单个文件发出串行请求。

快速Google搜索引导我使用Win32 API函数CreateFile(具体参见第34节“物理磁盘和卷"”)作为在C#中处理此问题的最佳选择 - 但是如果有&# 39;特定于.NET的成像方式,我还没有看到它。