2009-05-21 86 views
1

我有一个大约7 MB的文件,可以在几秒钟内保存到本地共享。但是,将该文件保存到网络位置需要分钟。我想知道我能做些什么来加快速度。以下是我目前的选择:将文件保存到网络

  1. 的数据保存到本地计算机上的临时文件,然后将临时文件复制到网络路径。我可能会这样做,因为这是最简单和最大的压力。
  2. 使用SetFilePointerEx()SetEndOfFile()。我认为这可能是有用的基础上回答这个问题:Creating big file on Windows
  3. 缓冲区写入。我可以自己缓存写入数据,并在缓冲区满时刷新,但是这对于已经由OS完成的缓存是否是多余的?

#1似乎是最好的选择,但我想知道如果有人有更好的方法来加快保存到网络路径的任何意见?

编辑:网络位于千兆局域网上,所以速度不应该成为问题。将文件复制到网络路径大约需要1秒。我只是注意到我们在更小的数据块上调用WriteFile(),所以我们可能应该这么做,所以优化更高级的代码以编写更大的块可能会有所帮助,但速度差异仍然如此重要,以至于仍然值得提问。

+0

如果复制文件需要一秒钟,那么您可能应该使用CopyFile或CopyFileEx函数,或者调用复制命令。 – ChrisW 2009-05-21 18:44:22

回答

0

您是否在慢速网络上运行?

编号去与选项编号为1,将文件保存到网络共享在后台

1

我想知道如果任何人有一个更好的办法的任何建议,以加快保存到网络路径?

也许你需要一个更好的网络。 ISP经常提供快速下载,但上传缓慢。使用FTP等协议传输7 MB需要多长时间?

1

你会想要aovid读取 - 修改 - 写入操作。通常情况下,您需要编写至少4KB的块,可能更高的2的幂。原因是要附加一个字节,通常需要读取文件的最后一个块,附加一个字节,然后写回新块。通过写入4KB块(仅),每个写入通常在文件末尾作为新的块结束。

缓存应该可以帮到你,但缓存并不完美。它可能有助于独占打开文件。如果您拒绝读取访问,操作系统可能会注意到刷新缓存对于其他应用程序来说并不重要。

CopyFile可以很快,因为它可以完全相同。

+0

好点,虽然我已经打开了一个独占访问的文件(用dwShareMode == 0调用CreateFile())。 – 2009-05-22 17:02:25