Estoy usando C# para leer un archivo CSV de texto plano de ~ 120 MB. Inicialmente, hice el análisis leyendo línea por línea, pero recientemente determiné que la lectura de todo el contenido del archivo en la memoria era mucho más rápido. El análisis ya es bastante lento porque el CSV tiene comas incrustadas dentro de comillas, lo que significa que tengo que usar una división de expresiones regulares. Este es el único que he encontrado que funciona de forma fiable:.NET System.OutOfMemoryException en String.Split() de 120 MB de archivo CSV
string[] fields = Regex.Split(line,
@",(?!(?<=(?:^|,)\s*\x22(?:[^\x22]|\x22\x22|\\\x22)*,)
(?:[^\x22]|\x22\x22|\\\x22)*\x22\s*(?:,|$))");
// from http://regexlib.com/REDetails.aspx?regexp_id=621
Con el fin de hacer el análisis después de leer todo el contenido en la memoria, hago una fracción de cadena en el carácter de nueva línea para obtener una matriz que contiene cada línea. Sin embargo, cuando hago esto en el archivo de 120 MB, obtengo un System.OutOfMemoryException
. ¿Por qué se queda sin memoria tan rápido cuando mi computadora tiene 4 GB de RAM? ¿Hay una mejor manera de analizar rápidamente un CSV complicado?
Las cuerdas son el hijo bastardo de la informática. un mal necesario, ¡pero todavía deseo que alguien descubra una mejor manera! –