我在文本文件中有一个数据库,由某些单词(NUM / OPP / TUM / YUR /等)拆分,以了解每个数据应该去哪里。问题是运行这个非常慢,在.txt文件中通过所有三千件事需要大约一个小时,很可能是由于.Split()(我认为)。
有更快的方法吗?
wholepage = streamReader.ReadToEnd();
while (true)
{
tempword = wholepage.Split()[tempnum];
tempnum++;
if (lastword == "NUM")
{
things[number_of_things].num = tempword;
number_of_things++;
slist.Add(new string[] { tempword });
listBox5.Items.Add(tempword);
}
lastword = tempword;
}
提前致谢。
编辑:感谢帮助人员......是的,它是无限循环,这在当时无关紧要,因为它永远不会通过循环一次(除非你等了一个小时)。
答案 0 :(得分:4)
是的,每次执行循环时,只将输入拆分一次:
wholepage = streamReader.ReadToEnd();
var split = wholepage.Split();
while (true)
{
tempword = split[tempnum];
// (...)
}
顺便说一下。你没有停止你的循环所以它可能永远不会结束(好吧,实际上它确实如此,当索引大于数组中的项数并抛出异常时)。您应该使用foreach
代替while
:
wholepage = streamReader.ReadToEnd();
var split = wholepage.Split();
foreach(var tempword in split)
{
if(lastword == "NUM")
{
things[number_of_things].num = tempword;
number_of_things++;
slist.Add(new string[] { tempword });
listBox5.Items.Add(tempword);
}
lastword = tempword;
}
答案 1 :(得分:0)
不要反复拆分! 把它带到循环外面......
myPage = wholepage.Split();
然后在你的循环中: tempword = MYPAGE [tempnum]
此外,不是while(true),它只是保持循环,而是使用for循环 其中myPage.length< tempnum