我正在編寫可以在網絡共享上覆制文件的應用程序。通常這些文件在同一個物理硬盤上移動。如果您使用Windows資源管理器進行測試,該操作將會很快執行。看起來,Windows知道相同的位置,做了真正的動作,而不是複製和刪除(這會更慢)。在網絡共享上移動文件時的性能問題
比方說,你要複製的一組文件:
\\computer\share\fileA.txt
\\computer\share\fileB.txt
目的地是例如:
\\computer\share\subfolder
該應用程序使用Windows Shell中的API(我在Delphi編寫應用程序,但問題應該與其他語言一樣):
with SHFileOpStruct do
begin
Wnd := 0;
wFunc := FO_MOVE;
pFrom := PChar ('\\computer\share\fileA.txt'+#0
+'\\computer\share\fileB.txt'+ #0#0);
pTo := PCahr ('\\computer\share\subfolder' + #0#0);
fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
end;
Result := SHFileOperationW (SHFileOpStruct);
Unfortu最近這段代碼做了一個「複製和刪除」,這對大文件或者你有很多文件來說要慢得多。我怎樣才能避免這種情況?有什麼辦法可以告訴移動操作,這些文件夾在同一個硬盤上?也許網絡路徑還有其他一些符號。
或者是否有Windows資源管理器使用的不同API函數?
對於短的比較:
- 數量的文件:11 KB
- 時間舉動在資源管理器:2秒
- 時間舉動260
- 每個文件的文件大小與SHFILEOPERATION:20秒
我使用Windows 7上我的開發系統,但它應該也可以在XP中工作,所以我不能用我的新FileOperation界面。
親切的問候
如果您首先映射共享的驅動器號,是否也會發生這種情況? – 2010-08-10 14:34:59