Análisis de archivos de una sola línea extremadamente grande

Estoy descargando datos de un sitio y el sitio me los da enmuy Grandes bloques. Dentro del bloque muy grande, hay "fragmentos" que necesito analizar individualmente. Estos "fragmentos" comienzan con "(ClinicalData)" y terminan con "(/ ClinicalData)". Por lo tanto, una cadena de ejemplo se vería así:

(ClinicalData)(ID="1")(/ClinicalData)(ClinicalData)(ID="2")(/ClinicalData)(ClinicalData)(ID="3")(/ClinicalData)(ClinicalData)(ID="4")(/ClinicalData)(ClinicalData)(ID="5")(/ClinicalData)

En circunstancias "ideales", el bloque debe ser una sola línea de datos, sin embargo, a veces hay caracteres de nueva línea erróneos. Como quiero analizar los fragmentos (ClinicalData) dentro del bloque, quiero que mis datos puedan analizarse línea por línea. Por lo tanto, tomo el archivo de texto, lo leo todo en un StringBuilder, elimino nuevas líneas (por si acaso) y luego inserto mis propias nuevas líneas, de esa manera puedo leer línea por línea.

StringBuilder dataToWrite = new StringBuilder(File.ReadAllText(filepath), Int32.MaxValue);

// Need to clear newline characters just in case they exist.
dataToWrite.Replace("\n", "");

// set my own newline characters so the data becomes parse-able by line 
dataToWrite.Replace("<ClinicalData", "\n<ClinicalData");

// set the data back into a file, which is then used in a StreamReader to parse by lines.
File.WriteAllText(filepath, dataToWrite.ToString());

Esto ha estado funcionando muy bien (aunque tal vez no sea eficiente, pero al menos es amigable para mí :)), hasta que no he encontrado una gran cantidad de datos que me están dando como un archivo grande de 280 MB.

Ahora estoy obteniendo una System.OutOfMemoryException con este bloque y simplemente no puedo encontrar una forma de evitarlo. ¿Creo que el problema es que StringBuilder no puede manejar 280 MB de texto directo? Bueno, he intentado divisiones de cadenas, divisiones regex.match y varias otras formas de dividirlo en fragmentos garantizados "(ClinicalData), pero sigo obteniendo la excepción de memoria. Tampoco tuve suerte al intentar leer predefinidos trozos (por ejemplo: usando .ReadBytes).

¡Cualquier sugerencia sobre cómo manejar una sola línea de texto de 280 MB de tamaño, que podría ser pero no podría ser realmente genial, sería genial!

Respuestas a la pregunta(2)

Su respuesta a la pregunta