使用 VC++ VisualStudio 2003。
我正在尝试将多个图像文件(每个文件 30kb 左右)从另一台计算机的共享文件夹复制到本地文件。
问题是一次传输可以有超过 2000 个左右的文件,而且它似乎会造成损失,需要更多的时间才能完成。
是否有任何替代方法可以从另一台计算机复制文件以加快复制速度?
提前致谢。
编辑*由于客户的要求,不可能显着改变代码库,讨厌因为非技术问题而不得不偏离最佳实践,但有没有更微妙的方法?比如另一个函数调用?
我知道我在要求一些神奇的巫术,以防万一有人知道。
使用 VC++ VisualStudio 2003。
我正在尝试将多个图像文件(每个文件 30kb 左右)从另一台计算机的共享文件夹复制到本地文件。
问题是一次传输可以有超过 2000 个左右的文件,而且它似乎会造成损失,需要更多的时间才能完成。
是否有任何替代方法可以从另一台计算机复制文件以加快复制速度?
提前致谢。
编辑*由于客户的要求,不可能显着改变代码库,讨厌因为非技术问题而不得不偏离最佳实践,但有没有更微妙的方法?比如另一个函数调用?
我知道我在要求一些神奇的巫术,以防万一有人知道。
有几件事要尝试:
使用操作系统复制文件是否更快?
如果不是,那么您的网络或其设置方式可能存在一些固有限制(可能是身份验证问题,或者远程服务器有一些硬件问题,或者它太忙,或者网卡由于冲突而丢失了太多数据包,故障开关,接线不良...)
进行一些测试以传输各种大小的文件。
小文件的传输总是较慢,因为获取它们的详细信息、传输数据、然后创建目录条目等需要大量开销。
如果大文件速度很快,那么您的网络还可以,您可能无法对系统进行太多改进(瓶颈在其他地方)。
最终,从代码中,您可以尝试打开文件,一次将文件读入一个大缓冲区,然后将它们保存在本地驱动器上。这可能会更快,因为您将绕过操作系统内部执行的大量检查。
您甚至可以通过几个线程同时打开、加载、写入文件以加快速度。
您可以检查多线程文件副本的几个参考:
如果在代码中自己实现这个太麻烦,您总是可以简单地在应用程序的后台执行一个像 McTool 这样的实用程序,让它为您完成工作。
好吧,首先,2000不是几个。如果大部分时间是因为您要发送大量小文件,那么您会想出一个解决方案,将它们在源处打包成一个文件并在目的地解包。这将需要在源代码处运行一些代码 - 您必须设计您的解决方案以允许这样做,因为我假设您目前只是从网络共享复制。
如果是网络速度(不太可能),您也可以压缩它们。
我自己的信念是,这将是文件的数量,基本上是副本的所有重复启动成本。这是因为 2000 个 30K 文件只有 60MB,而在 10Mb 链接上,理论上最短时间约为一分钟。
如果您的时间大大高于此,那么我会说我是对的。
使用 7zip 或类似的解决方案将它们全部压缩到一个7z文件中,传输它们,然后在另一端解压缩它们听起来就像您正在寻找的那样。
但是测量,不要猜测!测试一下,看看它是否能提高性能。然后做出决定。