Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加快高容量网络拷贝操作_C#_Network Programming - Fatal编程技术网

C# 加快高容量网络拷贝操作

C# 加快高容量网络拷贝操作,c#,network-programming,C#,Network Programming,我有一个系统,文件将从一个网络共享复制到另一个网络共享。这些文件本身不是很大,但要复制的文件数量是20000个。启动复制操作的.NET服务应用程序将在多台计算机上运行,但源文件夹和目标文件夹相同。这一过程似乎慢得令人无法接受: 我们假设这是因为高网络I/O和磁盘I/O 隔离瓶颈的故障排除步骤应该是什么? 在软件设计或硬件容量方面可以有哪些解决方案来加快进程。首先,确定是磁盘还是网络。从您正在写入的磁盘开始。我编写了一个快速应用程序,可以启动几个线程,并将随机数据写入几个固定大小的不同文件。测量需

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

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

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

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

第二,检查你的网络。你的路由器是性能差还是工作过度?确保所有机器和路由器在速度和协商方面达成一致。路由器上的100Mbit全双工和服务器上的100Mbit自动协商不是一回事。(对我们来说,情况就是这样,帮助很大)

作为Ben,压缩文件并传输一个大文件将有所帮助。我有这个问题,实际上我把文件存档了。它比没有压缩的拉链更快。我用过拉链和焦油


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

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

第二,检查你的网络。你的路由器是性能差还是工作过度?确保所有机器和路由器在速度和协商方面达成一致。路由器上的100Mbit全双工和服务器上的100Mbit自动协商不是一回事。(对我们来说,情况就是这样,帮助很大)

作为Ben,压缩文件并传输一个大文件将有所帮助。我有这个问题,实际上我把文件存档了。它比没有压缩的拉链更快。我用过拉链和焦油


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

处理大量小文件总是比处理一个大文件中相同数量的数据慢,因为所有额外的处理分配表,检查文件名引用等。如果将网络延迟添加到请求中,情况会更糟

并非总是有用,但即使在使用windows文件共享的千兆局域网上,压缩文件(无需压缩即可实现快速压缩)并在目标上再次提取也可能要快得多

虽然Hometoasts的答案很好,但我还是投票支持它,因为它掩盖了磁盘和网络IO瓶颈的可能性。我只是提供了一个解决方法,而不是答案


很高兴我能在一些实用且容易做的事情上提供帮助。:)

处理大量的小文件总是比处理一个大文件中相同数量的数据要慢,因为处理分配表、检查文件名引用等都需要额外的处理。如果将网络延迟添加到请求中,情况会更糟

并非总是有用,但即使在使用windows文件共享的千兆局域网上,压缩文件(无需压缩即可实现快速压缩)并在目标上再次提取也可能要快得多

虽然Hometoasts的答案很好,但我还是投票支持它,因为它掩盖了磁盘和网络IO瓶颈的可能性。我只是提供了一个解决方法,而不是答案


很高兴我能在一些实用且容易做的事情上提供帮助。:)

处理大量的小文件总是比在一个大文件中处理相同数量的数据慢,因为需要处理分配表、检查文件名引用等所有额外的操作。如果将网络延迟添加到请求中,情况会更糟。不总是有用的,但即使在使用windows文件共享的千兆局域网上,压缩文件(无需压缩即可快速压缩)并在目的地再次提取可能会快得多网络有多快?100比特?1Gbit?你们机器的操作系统是什么?与Vista版本相比,Win7对SMB2协议进行了改进。XP使用SMB1——可能非常慢。这是编程问题吗?我没有看到任何代码。@Ben Zipping可能是一个很好的想法。您能再解释一下分配表和检查文件名引用吗。我需要这些信息,因为我需要说服我的经理接受这种方法。你也可以解释一下没有压缩部分的zip。对我来说,拉链和压缩是同义的活动。对不起,这些天真的问题。我不是CS背景。压缩是存档的一种形式,但在windows上最常见,我想澄清一下。当您在任何软件中创建归档文件时,您都应该拥有opt