2017-01-09 18 views
0

それぞれ約30MBの大きなログファイルを読み込むWindowsアプリケーションを作成しようとしています。C#Windowsアプリで大きなファイルを読み込む方法

RichTextBoxコントロールを使用してロードしようとしましたが、ファイルを表示する前にクライアントを長時間ブロックするため、最も良いアプローチは何ですか?

私はあなたが事実上、チャンクにファイルを分割し、その後で、このチャンクを読み込むことができると思いTextBoxRichTextBox制御

+0

スレッディングは、ファイルストリームに見ても、役立ちますが、私は、スレッドでUIが応答ままそのようにロードすると思います。 – Trey

+0

私はそれを非同期にロードすることをお勧めします。この方法であなたのUIはブロックされません – taquion

+0

なぜあなたはかさばるコントロールを選択し、適切な名前を使用しませんでしたか? RichTextBox VTC – Paparazzi

答えて

2
StringBuilder sb = new StringBuilder(); 
      using (var sr = new StreamReader("path")) 
      { 
       do 
       { 
        var line = sr.ReadLine(); 
        sb.Append(line); 
       } while (!sr.EndOfStream); 
      } 
      textBox1.Text = sb.ToString(); 
1

を使用してみましたが、このコード

textBox1.Text = File.ReadAllText(Path + "\\Data.log"); 

を使用してログ・ファイルをロードしようとしています目的。たとえば、エディタを開いたときに、ファイルの一部(1つまたは複数のチャンク)だけを読み込んだ後、ユーザーがスクロールしたときに、さらにいくつかの読み込みが行われます。チャンクのサイズは、ユーザーがエディタを開いたときに表示される情報の量によって異なります。

RichTextBoxの例として、このanswerを試すことができますが、最適なチャンクのサイズを決定する必要があります。

1

私は個人的にSystem.IO +スレッドをお勧めします。

例:

string[] files = ["file1.txt", "file2.txt"]; 
void Main() { 
    var th = new Thread(readFiles); 
    th.Start(); 
} 

void readFiles() { 
    foreach (string file in files) { 
     var fileContents = ""; 
     fileContents = System.IO.File.ReadAllText(file); 
     // do something 
    } 
} 
+0

これは、UIの応答性を維持する方法の主な質問には対処していません... – Trey

+0

私はすでに試しました textBox2.Text = File.ReadAllText(Path + "\\ data.log"); しかしそれは、アプリケーションをブロックします。 –

+0

@FredrikNorlingスレッドを使って行うのは、そうしてはいけません。最新の編集を確認してください。 – skiilaa

関連する問題