2009-02-17 47 views
1

期运用VC++的VisualStudio 2003性能问题,从不同的计算机上拷贝文件

我试图复制多个图像文件(30KB左右,每个文件)从共享文件夹到本地另一computer`s文件。

问题是在一次传输中可能会有2000多个文件,而且看起来 会对其造成影响,因此需要花费更多时间才能完成。

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

在此先感谢。

编辑* 由于客户端的请求,这是不可能的dramaticaly改变代码库, 讨厌不得不从因非techinical问题的最佳做法偏离, 但有一个更微妙的approuch?如另一个函数调用?

我知道我是要求一些神奇的巫术,只是为了万一有人知道这样的要求。

回答

1

那么,一开始,2000年是不是几个。如果因为发送大量小文件而花费大部分时间,那么您会想出一个解决方案,将它们从源代码打包到单个文件中,并将其解包到目的地。这将需要在源代码上运行一些代码 - 您必须设计解决方案以允许执行此操作,因为我现在假设您只是从网络共享中进行复制。

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

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

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

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

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

+0

感谢您的意见。 它不是文件大小,归档方法似乎理想 – Saifis 2009-02-17 07:40:47

2

有几件事情尝试:

使用OS得更快
  • 被复制文件?

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

  • 使一些测试传输各种大小的文件。
    小文件总是传输速度较慢,因为存在大量开销来获取其细节,然后传输数据,然后创建目录条目等。

  • 如果大文件很快,那么你的网络是好的,你可能无法提高系统(瓶颈在别处)。

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

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

一对夫妇引用您可以检查辑阵线程文件副本:

如果在代码实现这个自己是太麻烦了,你总是可以简单地在你的应用程序的后台执行类似McTool一个实用程序,并让它为你做的工作。

+0

是的,使用操作系统的复制速度更快。 感谢adcice,将研究多线程方法 – Saifis 2009-02-17 07:42:29