2012-02-27 47 views
1

有誰知道如何執行File.DeleteDirectory.DeleteFile.Delete和Directory.Delete網絡性能

我的意思是:如果假設我要通過網絡刪除一些文件/文件夾並且網絡相當慢,會發生什麼情況?

它會完成一樣快,因爲它會在本地?將文件移動到該網絡位置會消耗更多的帶寬嗎?

+2

怎麼能刪除操作「消耗更多帶寬」比移動操作?你究竟在說什麼類型的帶寬? – spender 2012-02-27 14:40:45

+0

我知道比較移動和刪除是無稽之談。但只是想知道刪除執行時間與移動相比有多少。我應該更加清楚 – RavenXV 2012-02-27 14:44:53

回答

1

它不會像當地那樣快。這會很慢,延遲時間取決於您的網絡條件。

您不會將您的Delete命令「遠程」發送到知道如何刪除文件夾爲「原子操作」的「智能終端」。您的代碼實際上運行在「啞」的網絡位置,並逐個刪除文件。

至於你最後的問題,Delete幾乎總是比Move快。在跨磁盤(當然還有跨網絡位置)移動文件時,它實際上是一個複製操作(在其結尾處具有「刪除」)。

0

它們都同步運行 - 也就是說,它們在將控制權返回給調用者之前都等待任務完成。因此,通過網絡呼叫他們刪除文件或目錄需要更長的時間。

0

他們基本上是使用相應的本地的Win32 API,這意味着性能幾乎是一樣的本機應用程序(.NET和本機之間沒有真正的區別)...

基本上所有的文件I/O速度慢當在網絡驅動器/路徑/共享上完成時 - 是的,與在本地執行的相同操作相比,它們會更慢。慢多少取決於幾個方面,包括(但不限於)網絡延遲,服務器,文件系統的性能等

+0

幾乎不是問題,是的,通過網絡刪除比本地更慢。 – TomTom 2012-02-27 14:43:11

+0

@TomTom我懷疑你沒有閱讀我的答案的第二段? – Yahia 2012-02-27 14:43:40

+0

@TomTom另一點:OP的問題的第一部分是關於「他們如何執行」,我在第一段中回答,其餘的問題是關於我在第二段中回答的行爲... – Yahia 2012-02-27 14:45:14

1

他們都將調用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); 
     } 
    } 
} 
1

它會完成一樣快,因爲它會在本地?

不,這很慢,因爲在windows中沒有刪除目錄 - Directory.Delete列出網絡上的所有文件,然後刪除它們。與Windows資源管理器相同。取決於文件數量,這可能需要一些時間。刪除30.000個文件首先列出它們,然後是30.000個單獨的刪除操作。

與將文件移動到該網絡位置相比,它會消耗更多帶寬嗎?

不,它不會因爲文件永遠不會移動。複製文件總是慢很多,然後刪除它們。

+0

還有用於刪除目錄的shell中的'rd'命令。我不知道爲什麼GUI不使用相同的功能 - 除了可能讓用戶有機會點擊取消。 – 2013-08-08 09:28:56

0

他們通過Win32 API包裝調用。

通過一個免費工具在這裏查看他們的功能。 ILSPY

或者有償替代reflector