Ho un elenco di stringhe contenenti circa 7 milioni di elementi in un file di testo di dimensioni 152 MB. Mi chiedevo quale potesse essere il modo migliore per implementare una funzione che accetta una singola stringa e restituisce se si trova in quell'elenco di stringhe.Corrispondenza di una stringa in un file di testo di grandi dimensioni?
risposta
È 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))
{
...
}
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.
- 1. C# ricerca di file di testo di grandi dimensioni
- 2. Ordinare file di testo di grandi dimensioni in PowerShell
- 3. Leggere in modo efficiente file di testo di grandi dimensioni
- 4. Modifica di una singola riga in un file di testo di grandi dimensioni
- 5. File JSON di grandi dimensioni
- 6. Leggere file di grandi dimensioni in Java
- 7. Lettura di una riga casuale da un file di testo di grandi dimensioni
- 8. Trova e sostituisci in un file di grandi dimensioni
- 9. Come analizzare in modo efficiente file di testo di grandi dimensioni in Ruby
- 10. splitting una stringa di grandi dimensioni in oggetti SET
- 11. modo Efficiente di dividere un file di testo di grandi dimensioni in python
- 12. Modifica di un file di grandi dimensioni in Scala
- 13. Leggi file di grandi dimensioni in parallelo?
- 14. Come si modifica una stringa json di grandi dimensioni?
- 15. Come gestire griglie stringa di grandi dimensioni?
- 16. Caricamenti di file di grandi dimensioni
- 17. lettura di stringhe di grandi dimensioni (450000+ caratteri) dal file
- 18. CodeIgniter Caricamento di file di grandi dimensioni
- 19. Supporto file di grandi dimensioni in C++
- 20. Elaborazione di file xml di grandi dimensioni
- 21. PDFbox caricamento di file di grandi dimensioni
- 22. Elaborazione di file xlsx di grandi dimensioni
- 23. memorizzazione di file di grandi dimensioni in server sql
- 24. Visualizzazione di file XML di grandi dimensioni in eclissi?
- 25. stringa di sostituzione in un file di grandi dimensioni con php
- 26. Come estrarre le informazioni tra due parole univoche in un file di testo di grandi dimensioni
- 27. Come leggere un file di testo di grandi dimensioni in Python?
- 28. Leggere un file di grandi dimensioni in righe di stringa OCaml
- 29. Un file di grandi dimensioni o più file di piccole dimensioni?
- 30. Apertura Un file JSON di grandi dimensioni in Python
In realtà devo cercare ancora e ancora. Ma lo userò in un'applicazione web. La memoria diventerà un problema con molte richieste? –
@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
@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. –