在 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 段文本,在新行处截断并重复,直到所有内容都已阅读完毕,但这似乎很乏味。或者有没有办法为它分配更多的内存?
谢谢,加勒特
更新
感谢阿提拉,我想出了这个,它似乎工作。谢谢
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);