Effizientere Methode, Verzeichnis, Größe

Hab ich auch schon bauen Sie eine rekursive Funktion, um das Verzeichnis, die Größe eines Ordners Weg. Es funktioniert, doch mit der wachsenden Anzahl der Verzeichnisse, die ich habe durchsuchen und die Anzahl der Dateien im jeweiligen Ordner), dies ist eine sehr langsame, ineffiziente Methode.

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

Dies ist die Suche in allen Unterverzeichnissen für das argument Weg, so dass die dirFiles array wird ziemlich gross. Gibt es eine bessere Methode, dies zu erreichen? Ich habe gesucht, aber nicht gefunden habe, noch nichts.

Andere Idee, die mein Sinn gekommen war, setzen die Ergebnisse in einem cache, und, wenn die Funktion erneut aufgerufen wird, versuchen Sie und finden Sie die Unterschiede und nur Forschungs-Ordner, die geändert wurden. Nicht sicher, ob das eine gute Sache...

  • Dies ist eine weitaus kompliziertere Frage, dann würden Sie sich vorstellen. Ich würde vorschlagen, den Aufruf in eine win32-api-Methode für so etwas.
  • stackoverflow.com/q/128618/284240
  • Schauen Sie durch diese parallele Lösung stackoverflow.com/questions/2979432/...
  • Array-Größe ist ziemlich irrelevant, die Kosten sind zu 99,9% schlagen die Festplatte. Werden Sie zu zahlen haben, mindestens einmal, können Sie inkrementelle updates nach, die von FileSystemWatcher.
InformationsquelleAutor ikathegreat | 2012-03-22
Schreibe einen Kommentar