.NET System.OutOfMemoryException en String.Split () del archivo CSV de 120 MB

Estoy usando C # para leer un archivo CSV de texto plano de ~ 120 MB. Inicialmente hice el análisis leyéndolo línea por línea, pero recientemente determiné que leer todo el contenido del archivo en la memoria primero fue varias veces más rápido. El análisis ya es bastante lento porque el CSV tiene comas incrustadas entre comillas, lo que significa que tengo que usar una división de expresiones regulares. Este es el único que he encontrado que funciona de manera confiable:

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

Para realizar el análisis después de leer todo el contenido en la memoria, hago una divisió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 unSystem.OutOfMemoryException. ¿Por qué se queda tan rápido sin memoria cuando mi computadora tiene 4 GB de RAM? ¿Hay una mejor manera de analizar rápidamente un CSV complicado?

Respuestas a la pregunta(9)

Su respuesta a la pregunta