2017-05-22 5 views
0

kann jemand mir helfen, diesen spezifischen Block des Codes zu reparieren?Speicherproblem und duplizieren in meinem C# -Programm

Das ist mein Problem. Ich habe ein Programm geschrieben, das in ähnlicher Weise wie Windows Explorer funktioniert, was mir eine Hierarchie von Dateien und Ordnern innerhalb der Festplatte und aller anderen Laufwerke in einem Computer gibt.

Dieser Code unten schien ein Problem mit dem reibungslosen Ablauf des Programms zu haben. Wenn ich das Programm starte, startet das Programm sehr langsam und es dauert lange, bis es endlich geladen wird. Dies liegt daran, dass mein Programm alle meine Dateien und Ordner durchsucht, bevor es schließlich geladen wird. Dies kann für Computer mit vielen Daten lästig sein.

Ich bin in der Lage, das Problem zu beheben, indem Sie die zwei Zeilen im try Block auskommentieren. Aber wenn ich das Programm starte und ein Laufwerk öffne, dupliziert es (Beispiel: Wenn ich C:/Laufwerk expandiere, und dann das Laufwerk C:/reduziere, erscheint ein Duplikat des Laufwerks C:/im Programm)

Hier sind die Bilder unten.

image1

image1

image2

image2

Und das ist das Stück Code ich rede. Wenn ihr den vollständigen Code wollt, lasst es mich wissen.

private void GetDirectories(DirectoryInfo[] subDirs, TreeNode nodeToAddTo) 
    { 
     TreeNode aNode; 
     DirectoryInfo[] subSubDirs; 
     foreach (DirectoryInfo subDir in subDirs) 
     {  
      aNode = new TreeNode(subDir.Name, 0, 0); 
      aNode.Tag = subDir; 
      aNode.ImageKey = "folder"; 
      try 
      { 
       //subSubDirs = subDir.GetDirectories(); 
       //GetDirectories(subSubDirs, aNode); 
       nodeToAddTo.Nodes.Add(aNode); 
      } 
      catch(Exception e) 
      { 
       Console.WriteLine("none"); 
      } 
     } 
    } 
+1

Das gesamte Verzeichnis nicht rekursiv zuordnen. Dies führt zu einem langen Ausführungscode. Versuchen Sie stattdessen, einen Ordner Children zu laden, sobald es erweitert wird. Auch Ihr Code könnte Probleme mit nicht erlaubten Verzeichnissen haben. – LuckyLikey

Antwort

0

Dieser Code sollte nicht rekursiv geschrieben werden. Das ist das Problem. Nehmen wir an, Sie haben 100 Verzeichnisse. Jedes Verzeichnis hat 100 Unterverzeichnisse. Jedes Unterverzeichnis hat 100 Unterverzeichnisse. Das ist ziemlich viel. Aber möchte der Benutzer das tiefste Verzeichnis sehen? Nein. Er möchte Verzeichnisse in dem Verzeichnis sehen, in dem er sich gerade befindet. Sie sollten also nur Verzeichnisse und Dateien auflisten, die sich im ausgewählten Knoten befinden.

Also bauen Sie nicht den gesamten Baum beim Start. Einfach die wichtigsten Verzeichnisse auflisten. Und wenn der Benutzer auf ein Verzeichnis klickt, listet es nur seine Unterverzeichnisse auf.

Verwandte Themen