2012-04-27 2 views
2

私はすべてのディレクトリをコンソールアプリケーションにリストしていますが、10 +以上の時間がかかります(ここでは、おそらく10分以上かかったと仮定しています)、大量のディレクトリがありますが、10+あまりにも長いと始まる?この再帰的なディレクトリメソッドを高速化することは可能ですか?

class Program 
    { 
     static void Main(string[] args) 
     { 
      DirSearch(@"c:\"); 

      Console.ReadKey(); 
     } 

     static void DirSearch(string sDir) 
     { 
      try 
      { 
       foreach (string d in Directory.GetDirectories(sDir)) 
       { 
        Console.WriteLine(d); 
        DirSearch(d); 
       } 
      } 
      catch (System.Exception excpt) 
      { 
       Console.WriteLine(excpt.Message); 
      } 
     } 
    } 
+0

リリースの代わりにビルドをデバッグしますか? – RvdK

+5

ほとんどの時間はコンソールに書き込んで過ごしただけではありませんか?あなたがその行を削除した場合、瞬間的ではありません。 –

答えて

10

はい - 手動で再帰的にしないでください。

foreach (string d in Directory.GetDirectories(sDir, "*.*", SearchOption.AllDirectories)) 
{ 
    Console.WriteLine(d); 
} 

それとも最初の配列でそれらのすべてを置くのではなく、それらを見つけると、代わりのディレクトリ名を生成するDirectory.EnumerateDirectoriesを使用します:

をこれは、あなたがあなたの検索ですべてのサブディレクトリを含めるように SearchOption.AllDirectoriesを使用することができ、内蔵されました
foreach (string d in Directory.EnumerateDirectories(sDir, "*.*", SearchOption.AllDirectories)) 
{ 
    Console.WriteLine(d); 
} 
+0

これはSearchPatternパラメータが存在しないようです。私がするとき:Directory.GetDirectories(sDir、 "*"、SearchOption.AllDirectories)、何も表示されません。 – Xaisoft

+0

@Xaisoft:ありがとう、固定 – BrokenGlass

+0

Directory.GetDirectoriesは、あなたが言ったように、列挙を開始する前に最初に配列リストに入れているので、それでは、EnumerateDirectoriesの正しい提案ですか? – Xaisoft

関連する問題