跨网络复制结束时延迟

时间:2014-08-16 19:50:45

标签: delphi delphi-5

我必须在1-Gig网络上复制大约100MB的文件并且传输速度很好,但是在每个文件的副本末尾,大约有5秒的延迟。

我认为这与远程PC有关,因为如果我从一个本地磁盘复制到另一个本地磁盘,它似乎不会发生。

我正在使用一个简单的BlockRead / BlockWrite副本,因为它需要处理UNC和Mapped驱动器。我不希望副本在线程(API)中,因为遥控器是笔记本电脑或平板电脑,当用户看到它看起来过程已经结束时,他们可能会在线程完成之前拔掉并走开。

对于每个文件,我有什么办法可以做5秒的延迟吗?

1 个答案:

答案 0 :(得分:0)

通过文件共享在网络上复制文件的方式与同一台计算机中的硬盘驱动器的工作方式不同。 Windows文件共享是一个复杂的主题,它有自己完全不同的工作方式。使用任何软件(包括其自身的Windows资源管理器)的任何文件都受此网络文件共享的网络协议的约束。即使你是通过Windows资源管理器直接复制文件,并观察进度条,一旦进度条达到100%,你会发现文件复制完成有延迟。

答案是在使用Windows文件共享时无法避免此延迟。这完全取决于每台计算机,磁盘驱动器,网络基础设施,防火墙,防病毒软件,处理器等的性能。不能保证只是因为100%完成复制数据已准备就绪。关闭文件后,您的计算机会执行许多不同的可能例程(主要用于安全性和验证)。

正如其他人评论的那样,出于性能原因,复制像这样的大文件最好在线程内部,以便UI可以正确响应用户。多线程不是那么简单,特别是在更新VCL控件(例如进度条)时,所以你应该研究如何在一个线程中执行此操作。