У меня есть текстовый файл, содержащий 21000 строк (по одной строке) и 500 МБ других текстовых файлов (maily исходники). Для каждой строки мне нужно определить, содержится ли она в любом из этих файлов. Я написал программу, которая выполняет эту работу, но ее производительность ужасна (это сделало бы это через пару дней, мне нужно проделать эту работу максимум в 5-6 часов).
Я пишу с помощью C#, Visual Studio 2010Поиск нескольких строк в нескольких файлах
У меня есть несколько вопросов по поводу моей проблемы:
а) Какой подход лучше?
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));
с) резьб бы повысить производительность и как сделать это?
d) Есть ли программное обеспечение, которое может это сделать, поэтому мне не нужно писать собственный код?
вы должны написать программу? windows имеет встроенный findstr. Вы можете использовать цикл for, который мог бы искать эти другие файлы параллельно. –
Определенно не правильный/полный ответ, но не загружать все (500 МБ!) файлы для каждой строки. После того, как у вас есть (часть) файла в памяти, выполните все ваши действия. – Bertvan
Я хочу загрузить весь файл один за другим, а не 500 МБ файлов одновременно. – Ichibann