【发布时间】:2011-04-28 13:59:49
【问题描述】:
我有一个包含 21000 个字符串(每行一行)和 500 MB 其他文本文件(主要是源代码)的文本文件。对于每个字符串,我需要确定它是否包含在任何这些文件中。我编写的程序可以完成这项工作,但它的性能很糟糕(它会在几天内完成,我需要在最多 5-6 小时内完成这项工作)。
我正在使用 C#、Visual Studio 2010 编写
我有几个关于我的问题的问题:
a) 哪种方法更好?
foreach(string s in StringsToSearch)
{
//scan all files and break when string is found
}
或
foreach(string f in Files)
{
//search that file for each string that is not already found
}
b) 逐行扫描一个文件是否更好
StreamReader r = new StreamReader(file);
while(!r.EndOfStream)
{
string s = r.ReadLine();
//... if(s.Contains(xxx));
}
或
StreamReader r = new StreamReader(file);
string s = r.ReadToEnd();
//if(s.Contains(xxx));
c) 线程会提高性能吗?如何做到这一点?
d) 有没有什么软件可以做到这一点,这样我就不用自己写代码了?
【问题讨论】:
-
程序一定要写吗? windows 内置了 findstr。您可以使用 for 循环来并行搜索这些其他文件
-
绝对不是一个正确/完整的答案,但不要为每个字符串加载所有(500MB!)文件。一旦你有(部分)文件在内存中,然后执行所有操作。
-
我要一个一个地加载整个文件,而不是一次加载 500 MB 的文件。
-
你在什么操作系统上,如果你在 Win7 上,你可以在文件中自动搜索,而且速度非常快。
标签: c# string visual-studio-2010 file search