OutOfMemoryException en Regex Matches al procesar archivos grandes

Tengo un registro de excepciones de uno de los lanzamientos de código de producción.

System.OutOfMemoryException: Exception of type 'System.OutOfMemoryException' was thrown.
   at System.Text.RegularExpressions.Match..ctor(Regex regex, Int32 capcount, String text, Int32 begpos, Int32 len, Int32 startpos)
   at System.Text.RegularExpressions.RegexRunner.InitMatch()
   at System.Text.RegularExpressions.RegexRunner.Scan(Regex regex, String text, Int32 textbeg, Int32 textend, Int32 textstart, Int32 prevlen, Boolean quick)
   at System.Text.RegularExpressions.Regex.Run(Boolean quick, Int32 prevlen, String input, Int32 beginning, Int32 length, Int32 startat)
   at System.Text.RegularExpressions.MatchCollection.GetMatch(Int32 i)
   at System.Text.RegularExpressions.MatchEnumerator.MoveNext()

Los datos que intenta procesar fueron de aproximadamente 800 KB.

En mis pruebas locales funciona perfectamente bien. ¿Alguna vez has visto un comportamiento similar, cuál puede ser la causa?

Separé el texto antes de procesarlo, pero obviamente en ese caso la expresión regular podría no coincidir porque el archivo original se dividió desde un lugar aleatorio.

Mi Regexes:

EDIT 2:

Creo que este RegEx en particular está causando el problema, cuando lo pruebo en un entorno aislado se está comiendo la memoria al instante.

((?:( |\.\.|\.|""|'|=)[\/|\?](?:[\w#!:\.\?\+=&@!$'~*,;\/\(\)\[\]\-]|%[0-9a-f]{2})*)( |\.|\.\.|""|'| ))?

EDITA

Me estaba equivocando con mi prueba local. Estaba cargando una cadena grande y luego agregué cosas que hacen que .NET Framework se maree y luego proporcione una excepción OOM durante el RegEx en lugar de durante las operaciones de cadena (o al azar, así que ignore las cosas anteriores que he dicho).

Esta es una aplicación .NET Framework 2.0.