我正在尝试从特定目录中搜索许多文本文件,然后使用textchanged事件在所有文件中查找文本,并在屏幕上仅显示包含该文本的行。
目前它正在运作,但速度太慢了。我发布了一个搜索文本并在列表框中显示的功能。什么是使它快速工作的最有效方法。
listBox2.Items.Clear();
ArrayList lines = new ArrayList();
if (txtfile.Count > 0)
{
for (int i = 0; i < txtfile.Count; i++)
{
lines.AddRange((File.ReadAllLines(Path.Combine(path, txtfile[i].ToString()))));
}
for (int i = 0; i < lines.Count; i++)
{
if(lines[i].ToString().IndexOf(txt,StringComparison.InvariantCultureIgnoreCase)>=0)
{
listBox2.Items.Add(lines[i].ToString());
}
}
}
答案 0 :(得分:2)
您要搜索多少个文件?您始终可以索引它们,将内容存储在SQL数据库中,当然也可以使用Parallel.For
Parallel.For(1, 1000, i =>
{
//do something here.
}
);
答案 1 :(得分:0)
我会使用Directory.EnumerateFiles
和File.ReadLines
,因为他们的内存不足:
var matchingLines = Directory.EnumerateFiles(path, ".txt", SearchOption.TopDirectoryOnly)
.SelectMany(fn => File.ReadLines(fn))
.Where(l => l.IndexOf(txt, StringComparison.InvariantCultureIgnoreCase) >= 0);
foreach (var line in matchingLines)
listBox2.Items.Add(line);
我也会仅在用户明确触发时进行搜索,因此按下按钮而不是文本更改。