有誰知道如何執行File.Delete
和Directory.Delete
?File.Delete和Directory.Delete網絡性能
我的意思是:如果假設我要通過網絡刪除一些文件/文件夾並且網絡相當慢,會發生什麼情況?
它會完成一樣快,因爲它會在本地?將文件移動到該網絡位置會消耗更多的帶寬嗎?
有誰知道如何執行File.Delete
和Directory.Delete
?File.Delete和Directory.Delete網絡性能
我的意思是:如果假設我要通過網絡刪除一些文件/文件夾並且網絡相當慢,會發生什麼情況?
它會完成一樣快,因爲它會在本地?將文件移動到該網絡位置會消耗更多的帶寬嗎?
它不會像當地那樣快。這會很慢,延遲時間取決於您的網絡條件。
您不會將您的Delete
命令「遠程」發送到知道如何刪除文件夾爲「原子操作」的「智能終端」。您的代碼實際上運行在「啞」的網絡位置,並逐個刪除文件。
至於你最後的問題,Delete
幾乎總是比Move
快。在跨磁盤(當然還有跨網絡位置)移動文件時,它實際上是一個複製操作(在其結尾處具有「刪除」)。
它們都同步運行 - 也就是說,它們在將控制權返回給調用者之前都等待任務完成。因此,通過網絡呼叫他們刪除文件或目錄需要更長的時間。
他們基本上是使用相應的本地的Win32 API,這意味着性能幾乎是一樣的本機應用程序(.NET和本機之間沒有真正的區別)...
基本上所有的文件I/O速度慢當在網絡驅動器/路徑/共享上完成時 - 是的,與在本地執行的相同操作相比,它們會更慢。慢多少取決於幾個方面,包括(但不限於)網絡延遲,服務器,文件系統的性能等
他們都將調用Win32 API中做工作,
這是從反射器7:
[SecuritySafeCritical]
public static void Delete(string path)
{
if (path == null)
{
throw new ArgumentNullException("path");
}
string fullPathInternal = Path.GetFullPathInternal(path);
new FileIOPermission(FileIOPermissionAccess.Write, new string[] { fullPathInternal }, false, false).Demand();
if (!Win32Native.DeleteFile(fullPathInternal))
{
int errorCode = Marshal.GetLastWin32Error();
if (errorCode != 2)
{
__Error.WinIOError(errorCode, fullPathInternal);
}
}
}
它會完成一樣快,因爲它會在本地?
不,這很慢,因爲在windows中沒有刪除目錄 - Directory.Delete列出網絡上的所有文件,然後刪除它們。與Windows資源管理器相同。取決於文件數量,這可能需要一些時間。刪除30.000個文件首先列出它們,然後是30.000個單獨的刪除操作。
與將文件移動到該網絡位置相比,它會消耗更多帶寬嗎?
不,它不會因爲文件永遠不會移動。複製文件總是慢很多,然後刪除它們。
還有用於刪除目錄的shell中的'rd'命令。我不知道爲什麼GUI不使用相同的功能 - 除了可能讓用戶有機會點擊取消。 – 2013-08-08 09:28:56
怎麼能刪除操作「消耗更多帶寬」比移動操作?你究竟在說什麼類型的帶寬? – spender 2012-02-27 14:40:45
我知道比較移動和刪除是無稽之談。但只是想知道刪除執行時間與移動相比有多少。我應該更加清楚 – RavenXV 2012-02-27 14:44:53