我有一个系统,其中的文件将从一个网络共享复制到另一个网络共享。文件本身并不是很大,但要复制的文件数量为20000个。启动复制操作的.NET服务应用程序将在多台计算机上运行,但是源文件夹和目标文件夹是相同的。这个过程似乎慢得令人无法接受:
我们假设这是由于高网络I/O和磁盘I/O造成的。
应该采取哪些故障排除步骤来隔离瓶颈?在软件设计或硬件容量方面,有哪些解决方案可以加快这一过程。
发布于 2012-08-22 06:33:33
处理许多小文件总是比在一个大文件中处理相同数量的数据慢,因为所有额外的处理分配表,检查文件名引用等。当你在请求中添加网络延迟时,情况会更糟。
并不总是有用,但即使在千兆位局域网上使用windows文件共享,压缩文件(不压缩,以使其更快),并在目的地再次解压,可能会快得多
Hometoast的答案是好的,但我投票支持这个答案,因为它涵盖了磁盘和网络IO瓶颈的可能性。我真的只提供了一个变通方法,而不是一个答案。
很高兴我能在一些实用和容易做的事情上提供帮助。:)
发布于 2012-08-21 20:27:29
首先,确定是磁盘问题还是网络问题。从您正在写入的磁盘开始。我编写了一个快速应用程序来启动几个线程,并将随机数据写入几个固定大小的不同文件中。测量它需要多长时间。测量写入1个大文件,许多小文件。如果是磁盘,则很可能是由于许多单独的写入操作和RPM驱动器速度较慢造成的。也可能是您正在写入配置不佳的磁盘阵列。
第二,检查你的网络。您的路由器是性能不佳还是工作过度?确保您的所有机器和路由器在速度和协商上达成一致。路由器上的100Mbit全双工和服务器上的100Mbit自动协商不是一回事。(这就是我们的情况,并提供了极大的帮助)
作为Ben commented,压缩文件并传输一个大文件会有所帮助。我遇到了这个问题,实际上我已经把文件弄焦油了。它甚至比没有压缩的压缩还要快。我将SharpZipLib用于压缩和压缩。
你也可以尝试在不同的线程中缓冲你的读写。对我们来说,System.File.Copy在网络上甚至不可靠。手动缓冲我们的文件传输,显示了一些改进,但还不足以证明其复杂性。
https://stackoverflow.com/questions/12054423
复制相似问题