Como ya se ha señalado, esto no es posible. El tiempo de ejecución de .NET maneja asignaciones de almacenamiento dinámico en nombre de la aplicación.
En mi experiencia, las aplicaciones .NET comúnmente sufren de OOM cuando debería haber suficiente memoria disponible (o al menos, eso parece). La razón de esto suele ser el uso de grandes colecciones como matrices, Lista (que utiliza una matriz para almacenar sus datos) o similar.
El problema es que estos tipos a veces crean picos en el uso de la memoria. Si no se pueden cumplir estas solicitudes pico, se lanzará una excepción OOM. P.ej. cuando List necesita aumentar su capacidad, lo hace asignando una nueva matriz del doble del tamaño actual y luego copia todas las referencias/valores de una matriz a la otra. De forma similar, operaciones como ToArray hacen una nueva copia de la matriz. También he visto problemas similares en grandes operaciones LINQ.
Cada matriz se almacena como memoria contigua, por lo que para evitar OOM, el tiempo de ejecución debe poder obtener una gran cantidad de memoria. Como el espacio de direcciones del proceso puede estar fragmentado debido a la carga DLL y al uso general para el almacenamiento dinámico, esto no siempre es posible, en cuyo caso se lanza una excepción OOM.
¿Está leyendo el archivo de una vez? Es posible leer y tratar los datos poco a poco. – rerun
Creo que .net ahora también tiene Memory Maps, http://blogs.msdn.com/b/salvapatuel/archive/2009/06/08/working-with-memory-mapped-files-in-net-4.aspx –