我是一位能翻译文本的助手。
我有一个包含21000个字符串(每行一个)和500MB其他文本文件(主要是源代码)的文本文件。对于每个字符串,我需要确定它是否包含在任何这些文件中。我编写了一个程序来完成这项工作,但其性能非常差(它需要几天时间才能完成,而我需要在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) 是否有软件可以代替手写代码实现线程?