使用Copyfile()从不同计算机复制文件的性能问题

时间:2009-02-17 05:22:19

标签: performance visual-c++ mfc file-copying

使用VC ++ VisualStudio 2003。

我正在尝试将多个图像文件(每个文件30kb左右)从另一台计算机的共享文件夹复制到本地文件。

问题是在一次转移中可能有超过2000个左右的文件 要付出代价,大大地花费更多时间来完成。

是否有可能从另一台计算机复制文件的替代方法 加快副本速度?

提前致谢。

编辑* 由于客户的要求,不可能戏剧性地更改代码库, 因为非技术问题,不得不偏离最佳实践, 但有更微妙的approuch?比如另一个函数调用?

我知道我要求一些神奇的伏都教,以防万一有人知道这件事。

2 个答案:

答案 0 :(得分:2)

要尝试的一些事项:

  • 是否正在使用操作系统复制文件?

  • 如果不是,那么您的网络或其设置方式可能存在一些固有的限制(可能是身份验证问题,或者远程服务器存在一些硬件问题,或者太忙,或者网卡丢失太多)由于冲突,交换机故障,接线错误导致数据包......)

  • 进行一些传输各种尺寸文件的测试 小文件的传输速度总是较慢,因为要获取详细信息,然后传输数据,然后创建目录条目等需要大量开销。

  • 如果大文件很快,那么您的网络就可以了,而且您可能无法对系统进行太多改进(瓶颈在其他地方)。

  • 最终,从代码中,您可以尝试打开,一次性将文件读入大缓冲区,然后将它们保存在本地驱动器上。这可能会更快,因为您将绕过操作系统内部执行的大量检查。

  • 您甚至可以通过几个线程来同时打开,加载和写入文件,以加快速度。

您可以检查多个引用以查找多线程文件副本:

如果在代码中自己实现这一点太麻烦了,你可以随时在应用程序的后台执行像McTool这样的实用程序,让它为你完成工作。

答案 1 :(得分:1)

嗯,首先,2000年几个。如果由于您要发送大量小文件而占用大部分时间,那么您会想出一个解决方案,将源文件打包到一个文件中并在目的地解包。这将需要在源代码上运行一些代码 - 您必须设计自己的解决方案才允许这样做,因为我现在假设您只是从网络共享进行复制。

如果是网络速度(不太可能),您也可以压缩它们。

我自己的信念是,它将是文件的数量,基本上是副本的所有重复启动成本。那是因为2000个30K文件只有60MB,而在10Mb链路上,理论上的最短时间大约是一分钟。

如果你的时间远远高于那个,那么我会说我是对的。

使用7zip或类似文件将所有文件压缩到单个7z文件,传输它们,然后在另一端解压缩它们的解决方案听起来就像您正在寻找的那样。

但是衡量,不要猜!测试一下,看看它是否能提高性能。然后做出决定。