加快大容量网络复制操作

时间:2012-08-21 12:03:10

标签: c# network-programming

我有一个系统,文件将从一个网络共享复制到另一个网络共享。这些文件本身不是很大,但是要复制的文件数量是20000.启动复制操作的.NET服务应用程序将在多台机器上运行,但是源文件夹和目标文件夹是相同的。这个过程看起来慢得令人无法接受:

我们假设这是因为高网络I / O和磁盘I / O.

隔离瓶颈的故障排除步骤应该是什么? 在软件设计或硬件容量方面可以采用哪些解决方案来加速流程。

2 个答案:

答案 0 :(得分:3)

首先,确定它是磁盘还是网络。从您正在的磁盘开始。我编写了一个快速应用程序来启动几个线程并将随机数据写入固定大小的几个不同文件。测量需要多长时间。测量写1个大文件,很多小文件。如果它是磁盘,则很可能是由于许多单独的写操作和慢速RPM驱动器。或者你可能正在写一个配置不当的磁盘阵列。

其次,检查您的网络。你的路由器是穷人还是过度工作?确保所有机器和路由器都同意速度和协商。路由器上的100Mbit-FullDuplex和服务器上的100Mbit-AutoNegotiate 相同。 (这是我们的情况并且帮助很大)

作为Ben commented,压缩文件并传输一个大文件将有所帮助。我有这个问题,我实际上已经对文件进行了测试。它比没有压缩的压缩速度更快。我使用SharpZipLib来表示zip和tar。

您也可以尝试在单独的线程中缓冲读写操作。 System.File.Copy, for us ,甚至在网络上都不可靠。手动缓冲我们的文件传输,显示一些改进但不足以证明其复杂性。

答案 1 :(得分:0)

处理大量小文件总是比在一个大文件中处理相同数量的数据要慢,因为所有额外的处理分配表,检查文件名引用等。当你添加网络延迟时更糟糕的是请求。

并不总是有用,但即使在千兆局域网上使用Windows文件共享压缩文件(没有压缩的zip来快速实现)并在目标上再次提取可能会更快

Hometoasts答案很好,但我投了一票,因为它涵盖了磁盘和网络IO瓶颈的可能性。我真的只提供了一种解决方法,而不是答案。

尽管如此,我已经能够提供实用且易于操作的帮助。 :)