我已經構建了一個遞歸函數來獲取文件夾路徑的目錄大小。它可以工作,但是隨着我不得不搜索的目錄數量不斷增加(以及每個文件夾中的文件數量),這是一種非常緩慢且效率低下的方法。更高效的獲取目錄大小的方法
static string GetDirectorySize(string parentDir)
{
long totalFileSize = 0;
string[] dirFiles = Directory.GetFiles(parentDir, "*.*",
System.IO.SearchOption.AllDirectories);
foreach (string fileName in dirFiles)
{
// Use FileInfo to get length of each file.
FileInfo info = new FileInfo(fileName);
totalFileSize = totalFileSize + info.Length;
}
return String.Format(new FileSizeFormatProvider(), "{0:fs}", totalFileSize);
}
這是搜索參數路徑的所有子目錄,所以dirFiles
陣列變得相當大。有沒有更好的方法來完成這個?我搜索了四周,但還沒有找到任何東西。
另一個讓我想到的想法是將結果放入緩存中,當再次調用函數時,嘗試查找差異並僅重新搜索已更改的文件夾。不知道這是否是件好事...
這是一個更復雜的問題,然後你會想象。我建議爲這樣的事情調用一個win32 API方法。 – asawyer 2012-03-22 22:44:38
http://stackoverflow.com/q/128618/284240 – 2012-03-22 22:45:40
看看這個並行解決方案http://stackoverflow.com/questions/2979432/directory-file-size-calculation-how-to-make-it-faster – 2012-03-22 22:59:17