Более эффективный метод получения размера каталога.

Я уже создал рекурсивную функцию для получения размера каталога пути к папке. Однако это работает с растущим количеством каталогов, в которых мне приходится искать (и количеством файлов в каждой соответствующей папке), это очень медленный и неэффективный метод.

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);
}

Это ищет путь аргумента во всех подкаталогах, поэтому Массив становится довольно большим. Есть ли лучший способ сделать это? Я искал, но пока ничего не нашел.

Другая идея, которая пришла мне в голову, заключалась в том, чтобы поместить результаты в кеш, и когда функция вызывается снова, попробуйте найти различия и повторный поиск только в папках, которые изменились.Не уверен, что это тоже хорошо...

8
задан nemesv 22 March 2012 в 22:46
поделиться