2009-05-21 123 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