Tengo una lista de cadenas que contienen aproximadamente 7 millones de elementos en un archivo de texto de 152 MB de tamaño. Me preguntaba cuál sería la mejor manera de implementar la función a que toma una sola cadena y devuelve si está en esa lista de cadenas.¿Coincidir una cadena en un archivo de texto grande?
Respuesta
¿Va a tener que coincidir con este archivo de texto varias veces? Si es así, crearía un HashSet<string>
. De lo contrario, solo léelo línea por línea (supongo que hay una cadena por línea) y compruebe si coincide.
152MB de ASCII terminarán con más de 300MB de datos Unicode en la memoria, pero en las máquinas modernas tienen mucha memoria, por lo que mantener todo en un HashSet<string>
hará que las búsquedas repetidas sean muy rápidas.
La absoluta forma más sencilla de hacer esto es probablemente usar File.ReadAllLines
, a pesar de que va a crear una matriz que luego se desecha - no es genial para el uso de memoria, pero probablemente no es tan malo:
HashSet<string> strings = new HashSet<string>(File.ReadAllLines("data.txt"));
...
if (strings.Contains(stringToCheck))
{
...
}
depende de lo que quieras hacer. Cuando desee repetir la búsqueda de coincidencias una y otra vez, cargaré todo el archivo en la memoria (en un HashSet
). Allí es muy fácil buscar coincidencias.
- 1. Procesando archivo de texto grande en C#
- 2. Lea un archivo de texto grande en Textview
- 3. Analizando eficientemente un archivo de texto grande en C#
- 4. ¿Cómo escribir eficientemente un archivo de texto grande en C#?
- 5. Cómo hacer coincidir texto en cadena en Arduino
- 6. Leyendo un archivo de texto y convirtiéndolo en una cadena
- 7. C# - Leer en un archivo de texto grande (150 MB) en un cuadro de texto enriquecido
- 8. Búsqueda de una cadena en un archivo de texto grande: creación de perfiles de varios métodos en python
- 9. cadena reemplazar en un archivo grande con php
- 10. ¿Cómo lidiar con un archivo de texto muy grande?
- 11. ¿Cómo modifico una cadena json grande?
- 12. Buscar y reemplazar en un archivo grande
- 13. ¿Cómo se busca un archivo de texto grande para una cadena sin ir línea por línea en C#?
- 14. Objective-C crear un archivo de texto con una cadena
- 15. Lea un archivo de texto muy grande en una lista en clojure
- 16. PCRE haciendo coincidir palabras completas en una cadena
- 17. seleccionar -primero 1 en un archivo grande
- 18. ¿Cómo puedo guardar una matriz escasa de MATLAB muy grande en un archivo de texto?
- 19. Archivo de texto completo en una cadena en Java
- 20. PHP coincidir con una cadena exactamente
- 21. Coincidir una cadena con varios patrones
- 22. Regex: cómo hacer coincidir el último punto en una cadena
- 23. Ordenar un archivo grande en Java
- 24. Texto grande en Android
- 25. Buscar cadena en archivo de texto C
- 26. Reemplazar cadena en un archivo de texto en node.js
- 27. Convertir un entero grande a una cadena completa en PHP
- 28. Lectura y procesamiento de archivo de texto grande de 25GB
- 29. ¿Está almacenando una matriz o cadena de caracteres muy grande?
- 30. Coincidir cadena dinámica usando regex
En realidad, tengo que buscar una y otra vez. Pero voy a usar esto en una aplicación web. ¿Se convertirá la memoria en un problema con muchas solicitudes? –
@Taz: el número de solicitud es irrelevante, siempre y cuando construya su hashmap solo una vez :) De acuerdo con la documentación: * Cualquier miembro estático público de este tipo es seguro para subprocesos *, por lo que no hay problema aquí, también – tanascius
@Taz : tanascius tiene razón Cargalo una vez y deberia poder buscar (usando multiples hebras concurrentes, incluso - mientras nada este escribiendo en el) sin uso de memoria extra. Siempre que su servidor web tenga suficiente memoria para guardar el conjunto, ese es el camino a seguir. –