2010-04-19 5 views

risposta

5

È necessario confrontare questo file di testo più volte? In tal caso, creerei un HashSet<string>. Altrimenti, basta leggerlo riga per riga (presumo che ci sia una stringa per riga) e vedere se corrisponde.

152 MB di ASCII finiranno con 300 MB di dati Unicode in memoria, ma nelle macchine moderne hanno molta memoria, quindi mantenere l'intero lotto in un HashSet<string> renderà molto più veloci le ricerche ripetute.

L'assoluto più semplice modo per fare questo è probabilmente quello di utilizzare File.ReadAllLines, anche se che creerà una matrice che verrà poi scartata - non eccezionale per l'utilizzo della memoria, ma probabilmente non troppo male:

HashSet<string> strings = new HashSet<string>(File.ReadAllLines("data.txt")); 
... 

if (strings.Contains(stringToCheck)) 
{ 
    ... 
} 
+0

In realtà devo cercare ancora e ancora. Ma lo userò in un'applicazione web. La memoria diventerà un problema con molte richieste? –

+2

@Taz: il numero di richieste è irrilevante, purché si costruisca l'hashmap una sola volta :) Secondo la documentazione: * Qualsiasi membro statico pubblico di questo tipo è thread-safe *, quindi nessun problema anche qui – tanascius

+0

@Taz : tanascius ha ragione. Caricalo una volta e dovresti essere in grado di cercare (usando più thread simultanei, anche - a patto che non ci sia scritto niente) senza alcun utilizzo di memoria extra. Finché il tuo server web ha abbastanza memoria per contenere il set, questa è la strada da percorrere. –

3

Dipende da cosa vuoi fare. Quando si desidera ripetere la ricerca di corrispondenze ripetutamente, caricare l'intero file in memoria (in un HashSet). Lì è molto facile cercare le partite.

Problemi correlati