2017-03-23 14 views
-1

私は、自分が書いているコンピュータ検索プログラム用のテキストを見つけるために、システム上の多くのファイルを検索しています。しかし、大きなファイルが読み込まれると、行はメモリに残り、1GB以上のRAMを使用します。私は問題が何であるか疑問に思いました。ここに私のコードです。多くのファイルを読むとメモリに問題がありますか?

private int SearchInFile(SearchResult searchResult, Options options) { 
     if (searchQuery.inFile.Length == 0) return -1; 
     if (!options.searchOnlyInTextFiles || searchResult.type.Equals(".txt")) { 
      try { 
       int index = 0; 
       foreach(string line in File.ReadLines(searchResult.path)) { 
        index++; 
        if (line.Contains(searchQuery.inFile)) return index; 
       } 
      } catch(Exception e) { 
       Console.WriteLine(e); 
      } 
     } 
     return -1; 
    } 
+0

あなたの質問は何ですか? –

+0

管理対象メモリでは、メモリ使用量の増加は正常です。 GCは一旦メモリが圧迫されるとクリーンアップされます。 – Sefe

+0

@Sefeでもギガバイトですか? – Vector

答えて

0

ストリームはFileStreamのように開いて、一度に1024バイトしか読み込まないでください。新しい行の文字が見つかるまで、バイトを検査し、現在の行だけをRAMに構築し、探しているテキストをその行に表示する必要があります。この方法では、現在RAMで検査している行だけを保持します。

行末がどのように定義されているかに注意する必要があります。異なるテキストファイルには、行の終わりを定義するさまざまな方法があります。これに加えて、.txtファイルがどのようにエンコードされているか、UTF8、ASCIIなどを認識する必要があります。

注意しておけば、アプリケーションが一定量以上のRAMを使用しないようにすることができます。ガベージコレクタはあまりビジーではありません。

+0

ありがとう!これは私の問題を正確に解決しました。 – Vector

+0

私の答えを正しいものとしてマークしてください。 –

+0

o yea xd、そこに行くよ – Vector

関連する問題