2017-02-01 5 views
-1

を使用し、私はこの機能を持つアプリケーションがあります:あなたは、この機能は、多くのファイルに適用することができます見ることができるようにC#のメモリが多すぎる

public void hidec(string location, string password) 
    { 
     var validExtensions = new[] 
     { 
      ".txt" 
     }; 
     var files = Directory.GetFiles(location); 
     var childDirectories = Directory.GetDirectories(location); 
     foreach (var t in files) 
     { 
      try 
      { 
       var extension = Path.GetExtension(t); 
       if (validExtensions.Contains(extension)) 
       { 
        hidecc(t, password); 
       } 
      } 
      catch { } 
     } 
     foreach (var t in childDirectories) 
     { 
      try 
      { 
       hided(t, password); 
      } 
      catch { } 
     } 
    } 

を、私が持っている問題は、ファイルがたくさんあるときにということである(50 -60Gbのテキストファイル)、プログラムは2GB以上のRAMを使用し始め、コンピュータがクラッシュし、遅れます。どのようにできるのか? スピードに関係なく、ラムの使用量が減り、速度が遅くなる可能性があります。あなた

+4

ファイルの量にかかわらず、このコードでは、ファイルを処理する場所の「hidecc」または「hided」にメモリの問題がある場合は、ほとんど使用しません。 – Gusman

答えて

3

GetFiles /ディレクトリ おかげで一度にファイル名のすべてを読んで、あなたは、ファイル&ディレクトリの多くを期待していた場合、メモリに保管してください、必要に応じて情報をロードしますEnumerateFiles & EnumerateDirectoriesを使用します。

+0

コードで実装できません – SquizzyHc

+0

これらの関数が.Net 4.0(2010年リリース)で追加されたようです。古いバージョンのフレームワークを使用している場合(おそらく可能ですが)、アップグレードする必要があります。 – lgaud

+0

私は.net 3.5を使用しています。それ以外の理由で代替できません。 – SquizzyHc

関連する問題