Se lanza System.OutOfMemory. ¿Cómo encontrar al culpable?

Estoy usando Visual C # Express 2008 y tengo una aplicación que se inicia en un formulario, pero usa un hilo con una función de visualización delegada para encargarse esencialmente de todo el procesamiento. De esa forma, mi formulario no se bloquea mientras se procesan las tareas.

Recientemente, después de pasar por un proceso repetido varias veces (el programa procesa los datos entrantes, por lo que cuando ingresan los datos, el proceso se repite) mi aplicación se bloqueará con un error System.OutOfMemory.

El seguimiento de la pila en el mensaje de error es inútil porque solo me dirige a la línea donde llamo la función de control de formulario delegado.

He escuchado a personas decir que usan ProcMon de SysInternals para ver por qué ocurren errores como este. Pero yo, por mi vida, no puedo entenderlo. La cantidad de memoria que estoy usando no cambia a medida que se ejecuta el programa, si sube, vuelve a bajar. Además, incluso si estaba subiendo, ¿cómo puedo determinar qué parte de mi programa es el problema?

¿Cómo puedo investigar este problema?

EDITAR:

Entonces, después de profundizar en este problema, revisé cualquier cosa que alguna vez volviera a declarar. Hubo algunos casos en los que tuve una matriz enorme = new uint [gigantesco], así que me deshice de unos 3.

En lugar de deshacerse del error, ahora es mucho más oscuro y confuso.

Mi aplicación toma los datos entrantes y los procesa usando OpenGL. Ahora, en lugar de lanzar "System.OutOfMemory", simplemente no representa nada con OpenGL.

La única diferencia en mi código es que no hago nuevas matrices para guardar los datos que trazo. De esa manera, espero, mi matriz permanece en el mismo lugar en la memoria y no hace nada suicida con mi LOH.

Desafortunadamente, esto tuerce a la bestia mucho más allá de mis escasos medios. Con cero errores apareciendo, y todas mis estructuras de datos aparentemente todavía correctamente llenas, ¿cómo puedo encontrar mi problema? ¿OpenGL usa la memoria de una manera oscura para no lanzar excepciones cuando falla? ¿Sigue siendo un problema la memoria? ¿Cómo me entero? Todos los perfiladores de memoria en el mundo parecen decirme muy poco.

EDITAR:

Con la gran cantidad de apoyo de esta comunidad (con felicitaciones adicionales a Amissico), el error finalmente se ha eliminado. Aparentemente estaba agregando elementos a una lista de OpenGL, y nunca los quité de la lista.

La aplicación que finalmente me dio pistas fue .Net Memory Profiler. En el momento del accidente, mostró 1,5 GB de datos en el<unknown> categoría. A través del proceso de eliminación (todo lo demás en la lista que se nombró), lo último que se marcó de la lista fue la línea de representación de OpenGL. El resto es historia.

Respuestas a la pregunta(5)

Su respuesta a la pregunta