それぞれ約30MBの大きなログファイルを読み込むWindowsアプリケーションを作成しようとしています。C#Windowsアプリで大きなファイルを読み込む方法
RichTextBox
コントロールを使用してロードしようとしましたが、ファイルを表示する前にクライアントを長時間ブロックするため、最も良いアプローチは何ですか?
私はあなたが事実上、チャンクにファイルを分割し、その後で、このチャンクを読み込むことができると思いTextBox
とRichTextBox
制御
それぞれ約30MBの大きなログファイルを読み込むWindowsアプリケーションを作成しようとしています。C#Windowsアプリで大きなファイルを読み込む方法
RichTextBox
コントロールを使用してロードしようとしましたが、ファイルを表示する前にクライアントを長時間ブロックするため、最も良いアプローチは何ですか?
私はあなたが事実上、チャンクにファイルを分割し、その後で、このチャンクを読み込むことができると思いTextBox
とRichTextBox
制御
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();
を使用してみましたが、このコード
textBox1.Text = File.ReadAllText(Path + "\\Data.log");
を使用してログ・ファイルをロードしようとしています目的。たとえば、エディタを開いたときに、ファイルの一部(1つまたは複数のチャンク)だけを読み込んだ後、ユーザーがスクロールしたときに、さらにいくつかの読み込みが行われます。チャンクのサイズは、ユーザーがエディタを開いたときに表示される情報の量によって異なります。
RichTextBox
の例として、このanswerを試すことができますが、最適なチャンクのサイズを決定する必要があります。
私は個人的に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
}
}
スレッディングは、ファイルストリームに見ても、役立ちますが、私は、スレッドでUIが応答ままそのようにロードすると思います。 – Trey
私はそれを非同期にロードすることをお勧めします。この方法であなたのUIはブロックされません – taquion
なぜあなたはかさばるコントロールを選択し、適切な名前を使用しませんでしたか? RichTextBox VTC – Paparazzi