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

Performance 使用Copyfile()从不同计算机复制文件时出现的性能问题,performance,visual-c++,mfc,file-copying,Performance,Visual C++,Mfc,File Copying,使用VC++VisualStudio 2003 我正在尝试将多个图像文件(每个文件大约30kb)从另一台计算机的共享文件夹复制到本地文件 问题是一次传输可能会有2000多个文件,而且看起来 要付出代价,就要花更多的时间来完成 是否有其他方法从另一台计算机复制文件,可能会 加快复印速度 提前谢谢 编辑* 由于客户端请求,不可能戏剧性地更改代码库, 不喜欢因为非技术问题而偏离最佳实践, 但还有更微妙的方法吗?比如另一个函数调用 我知道我在要求一些魔法巫术,以防有人知道。好吧,首先,2000年不是几年

使用VC++VisualStudio 2003

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

问题是一次传输可能会有2000多个文件,而且看起来 要付出代价,就要花更多的时间来完成

是否有其他方法从另一台计算机复制文件,可能会 加快复印速度

提前谢谢

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


我知道我在要求一些魔法巫术,以防有人知道。

好吧,首先,2000年不是几年。如果因为发送大量小文件而占用了大部分时间,那么您可以想出一个解决方案,将源位置的文件打包成单个文件,然后在目标位置解包。这将需要在源代码处运行一些代码——您必须设计您的解决方案,以允许这样做,因为我现在假设您只是从网络共享中复制

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

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

如果你的时间远远超过这个,那么我会说我是对的

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

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

尝试以下几件事:

  • 使用操作系统复制文件是否更快

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

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

  • 如果大文件速度很快,那么您的网络就正常了,您可能无法对系统进行太多改进(瓶颈在别处)

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

  • 您甚至可以在几个线程上同时打开、加载和写入文件,以加快速度

您可以检查多线程文件副本的几个参考:

  • 论代码工程
  • 第九频道的讨论主题
  • 用于并行文件复制的命令行工具

如果自己在代码中实现这一点太麻烦,您可以在应用程序的后台简单地执行一个实用程序,比如McTool,让它为您完成工作。

谢谢您的建议。它不是文件大小,归档方法似乎很理想是的,使用操作系统复制更快。感谢您的广告,我们将研究多线程方法