Tengo un archivo de texto que contiene 21000 cadenas (una línea cada una) y 500 MB de otros archivos de texto (códigos fuente). Para cada cadena, necesito determinar si está contenida en cualquiera de esos archivos. Escribí un programa que hace el trabajo, pero su rendimiento es terrible (haría eso en un par de días, necesito hacer el trabajo en un máximo de 5-6 horas).
estoy escribiendo usando C#, Visual Studio 2010Búsqueda de múltiples cadenas en múltiples archivos
tengo par de preguntas acerca de mi problema:
a) ¿Qué método es mejor?
foreach(string s in StringsToSearch)
{
//scan all files and break when string is found
}
o
foreach(string f in Files)
{
//search that file for each string that is not already found
}
b) ¿Es mejor para escanear una línea de archivos por línea
StreamReader r = new StreamReader(file);
while(!r.EndOfStream)
{
string s = r.ReadLine();
//... if(s.Contains(xxx));
}
o
StreamReader r = new StreamReader(file);
string s = r.ReadToEnd();
//if(s.Contains(xxx));
c) ¿Sería enhebrar mejorar el rendimiento y cómo ¿Para hacer eso?
d) ¿Hay algún software que pueda hacer eso para no tener que escribir mi propio código?
tienes que escribir el programa? windows has foundtr built. Puede usar un bucle for que podría buscar estos otros archivos en paralelo –
Definitivamente no es una respuesta correcta/completa, pero no carga todos los archivos (500MB!) para cada cadena. Una vez que tenga (parte de) el archivo en la memoria, realice todas sus acciones a continuación. – Bertvan
Solicito cargar todo el archivo uno por uno, no 500 MB de archivos a la vez. – Ichibann