У меня есть текстовый файл, содержащий 21000 строк (по одной строке) и 500 МБ других текстовых файлов (исходные коды maily).Для каждой строки мне нужно определить, содержится ли она в каком-либо из этих файлов.Я написал программу, которая выполняет эту работу, но ее производительность ужасна (она сделает это через пару дней, мне нужно выполнить работу максимум за 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
}
б) Лучше сканировать одну строку за строкой
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) Есть ли какое-нибудь программное обеспечение, которое может это сделать, чтобы мне не приходилось писать свой собственный код?