Windows フォーム C# アプリには、ユーザーがログ データを貼り付けるテキスト ボックスがあり、並べ替えられます。各行を個別に確認する必要があるため、入力を新しい行で分割しますが、100,000 以上の行が多数ある場合、OutOfMemoryException がスローされます。
私のコードは次のようになります。
StringSplitOptions splitOptions = new StringSplitOptions();
if(removeEmptyLines_CB.Checked)
splitOptions = StringSplitOptions.RemoveEmptyEntries;
else
splitOptions = StringSplitOptions.None;
List<string> outputLines = new List<string>();
foreach(string line in input_TB.Text.Split(new string[] { "\r\n", "\n" }, splitOptions))
{
if(line.Contains(inputCompare_TB.Text))
outputLines.Add(line);
}
output_TB.Text = string.Join(Environment.NewLine, outputLines);
ここで、テキストボックスのテキストを行ごとに分割すると問題が発生しますinput_TB.Text.Split(new string[] { "\r\n", "\n" }
これを行うより良い方法はありますか?最初の X 個のテキストを取得し、新しい行で切り捨てて、すべてが読み取られるまで繰り返すことを考えましたが、これは面倒です。または、より多くのメモリを割り当てる方法はありますか?
ありがとう、ギャレット
アップデート
Attila のおかげで、私はこれを思いつきました。ありがとう
StringReader reader = new StringReader(input_TB.Text);
string line;
while((line = reader.ReadLine()) != null)
{
if(line.Contains(inputCompare_TB.Text))
outputLines.Add(line);
}
output_TB.Text = string.Join(Environment.NewLine, outputLines);