我用winform做了一个小功能,筛选数据的,具体功能如下
textBox3中存放着大概1400行的字符串,textBox1中会存放大概40W+行的字符串,现需要将textBox1中的字符串按行进行遍历筛选,如果textBox1中的某一行字符串包含有textBox3中的任意一行字符串,并且状态正常,则保留,否则删除这一行。最后输出最终的数据
我编写的如下,但是运行起来很慢,请教下该怎么优化?
string[] hosts = textBox1.Text.Split(new string[] { System.Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
string[] numbers = textBox3.Text.Split(new string[] { System.Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries);
textBoxtext("");//textbox清空
string str = "";
long sum = 0;
backgroundWorker1.WorkerReportsProgress = true;
for (int i = 0; i < hosts.Length; i++)
{
//进度条更新
sum = (i + 1) * 100 / hosts.Length;
backgroundWorker1.ReportProgress((int)sum, String.Format("{0}%", sum));
//如果当前行是忽略筛选的行
if (i < int.Parse(textBox4.Text))
{
str += hosts[i] + Environment.NewLine;
continue;
}
//筛选状态,忽略9202、9203、9204、9004状态的行
string[] qqq = hosts[i].Split(' ');
try
{
if (qqq[int.Parse(textBox2.Text) + 1].StartsWith("9202-") || qqq[int.Parse(textBox2.Text) + 1].StartsWith("9203-") || qqq[int.Parse(textBox2.Text) + 1].StartsWith("9204-") || qqq[int.Parse(textBox2.Text) + 6].StartsWith("9004"))
{ continue; }
}
catch { }
//保存正常行到变量str中
//bool containsValue = Array.Exists(numbers, element => element == qqq[int.Parse(textBox2.Text) - 1]);
//if (containsValue == true) { str += hosts[i] + Environment.NewLine; }
if (textBox3.Text.Contains(qqq[int.Parse(textBox2.Text) - 1] + Environment.NewLine))
{
str += hosts[i] + Environment.NewLine;
}
}
textBoxtext(str.Replace(@" ", " "));//输出到textbox中
MessageBox.Show("筛选完成");