2017-05-22 22 views
0

この特定のコードブロックを修正するお手伝いができますか?私のC#プログラムにメモリの問題と重複があります

これは私の問題です。 Windowsエクスプローラと同様の方法で動作するプログラムを作成しました。このプログラムは、ハードドライブ内のファイルとフォルダの階層構造と、コンピュータ内の他のすべてのドライブを提供します。

このコードは、プログラムをスムーズに実行することに問題があるようです。私がプログラムを始めると、プログラムは非常に遅く始まり、最終的にロードするまでに時間がかかります。これは、私のプログラムが最終的にロードする前にすべてのファイルとフォルダを通過しているという事実によるものです。これは、大量のデータを持つコンピュータにとっては煩わしくなる可能性があります。

私はtryブロックで2行をコメントアウトすることで問題を解決できます。しかし、プログラムを実行してドライブを開くと、重複してしまいます(例:C:/ドライブを展開してからC:/ドライブを折りたたむと、C:/ドライブの複製がプログラムに表示されます)

以下は、以下の画像です。

image1の

image1

画像2

image2

そして、これは私が話しているコードの一部です。もし皆さんが完全なコードをお望みなら私に知らせてください。

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

ディレクトリ全体を再帰的にマップしないと、結果として実行時間の長いコードになります。代わりに、フォルダが展開されるとすぐにフォルダを読み込みます。 また、コードに問題があり、許可されていないディレクトリがあります。 – LuckyLikey

答えて

0

このコードは再帰的に記述しないでください。これが問題です。 100個のディレクトリがあるとします。すべてのディレクトリには100のサブディレクトリがあります。すべてのサブディレクトリには100のサブディレクトリがあります。それはかなり大変です。しかし、ユーザーは最も深いディレクトリを見たいですか?いいえ。彼は現在ディレクトリにあるディレクトリを見たいと思っています。したがって、選択したノードにあるディレクトリとファイルだけを一覧表示する必要があります。

起動時にツリー全体を構築しないでください。メインディレクトリを一覧表示するだけです。ユーザーがディレクトリをクリックすると、そのディレクトリだけが一覧表示されます。

関連する問題