1

使用 VC++ VisualStudio 2003。

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

问题是一次传输可以有超过 2000 个左右的文件,而且它似乎会造成损失,需要更多的时间才能完成。

是否有任何替代方法可以从另一台计算机复制文件以加快复制速度?

提前致谢。

编辑*由于客户的要求,不可能显着改变代码库,讨厌因为非技术问题而不得不偏离最佳实践,但有没有更微妙的方法?比如另一个函数调用?

我知道我在要求一些神奇的巫术,以防万一有人知道。

4

2 回答 2

2

有几件事要尝试:

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

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

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

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

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

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

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

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

于 2009-02-17T05:37:23.123 回答
1

好吧,首先,2000不是几个。如果大部分时间是因为您要发送大量小文件,那么您会想出一个解决方案,将它们在源处打包成一个文件并在目的地解包。这将需要在源代码处运行一些代码 - 您必须设计您的解决方案以允许这样做,因为我假设您目前只是从网络共享复制。

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

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

如果您的时间大大高于此,那么我会说我是对的。

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

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

于 2009-02-17T05:36:46.417 回答