J'ai un fichier texte contenant 21000 chaînes (une ligne chacune) et 500 Mo d'autres fichiers texte (codes sources maily). Pour chaque chaîne j'ai besoin de déterminer si elle est contenue dans l'un de ces fichiers. J'ai écrit un programme qui fait le travail mais sa performance est terrible (il le ferait dans quelques jours, j'ai besoin de faire le travail en 5-6 heures maximum).
J'écris en C#, Visual Studio 2010Recherche de plusieurs chaînes dans plusieurs fichiers
J'ai quelques questions concernant mon problème:
a) Quelle est la meilleure approche?
foreach(string s in StringsToSearch)
{
//scan all files and break when string is found
}
ou
foreach(string f in Files)
{
//search that file for each string that is not already found
}
b) Est-il préférable de balayer une ligne de fichiers en ligne
StreamReader r = new StreamReader(file);
while(!r.EndOfStream)
{
string s = r.ReadLine();
//... if(s.Contains(xxx));
}
ou
StreamReader r = new StreamReader(file);
string s = r.ReadToEnd();
//if(s.Contains(xxx));
c) Est-ce que le filetage d'améliorer les performances et comment pour faire ça?
d) Y a-t-il un logiciel qui peut le faire pour que je n'aie pas à écrire mon propre code?
avez-vous d'écrire le programme? Windows a findstr intégré. Vous pouvez utiliser une boucle for qui pourrait rechercher ces autres fichiers en parallèle –
Certainement pas une réponse correcte/complète, mais ne chargez pas tous les fichiers (500 Mo!) pour chaque chaîne. Une fois que vous avez (une partie de) le fichier en mémoire, faites alors toutes vos actions. – Bertvan
Je souhaite charger un fichier entier un par un, pas 500 Mo de fichiers à la fois. – Ichibann