Ho un file di testo contenente 21000 stringhe (una riga ciascuna) e 500 MB di altri file di testo (codici sorgente generici). Per ogni stringa ho bisogno di determinare se è contenuto in uno di questi file. Ho scritto un programma che fa il lavoro ma le sue prestazioni sono terribili (lo farei in un paio di giorni, ho bisogno di fare il lavoro in 5-6 ore al massimo).
Sto scrivendo utilizzando C#, Visual Studio 2010Ricerca di stringhe multiple in più file
Ho paio di domande riguardanti il mio problema:
a) Quale approccio è migliore?
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) è meglio la scansione di una file riga per riga
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) Sarebbe threading migliorare le prestazioni e come fare quello?
d) Esiste un software in grado di farlo, quindi non devo scrivere il mio codice?
devi scrivere il programma? windows ha findstr integrato. Puoi usare un ciclo for che possa cercare questi altri file in parallelo –
Decisamente non una risposta corretta/completa, ma non caricare tutti i file (500 MB!) per ogni stringa. Una volta che hai (parte) il file in memoria, fai tutte le tue azioni allora. – Bertvan
Suppongo di caricare l'intero file uno per uno, non 500 MB di file contemporaneamente. – Ichibann