De acuerdo con MSDN, hay una "sugerencia" que indica que una aplicación .NET que se ejecuta bajo carga pesada con recolección de basura concurrente (<gcConcurrent enabled="true"/>
o no especificada, ya que es el comportamiento predeterminado) puede lanzar ExecutionEngineException. ¿Alguien conoce un artículo de Microsoft KB u otra fuente que proporcione antecedentes adicionales sobre esto?¿Por qué el GC simultáneo a veces causa ExecutionEngineException (por MSDN)?
Hemos experimentado esto directamente con una aplicación de servicio de Windows basada en NHibernate 3.2, que se bloqueará invariablemente después de unas pocas horas de funcionamiento. Pudimos rastrear la excepción a la llamada ISession.Flush().
Hay un thread en personas que informan lo que parece ser el mismo problema. Su solución sugerida, que era deshabilitar el GC concurrente, nos ha funcionado hasta ahora, aunque cambiar al modo de servidor GC (<gcServer enable="true"/>
), que implícitamente deshabilita GC concurrente, también lo hizo.
Antes de enviar esto a MS como un error, me gustaría averiguar si alguien tiene información adicional sobre la inestabilidad concurrente de GC que menciona la sugerencia.
Dado que está documentado, es probable que su error se cierre como "Por diseño". Aparte de eso, pregunta interesante. – vcsjones
@Nick Jones: la documentación de .NET 4.0 también lo enumera como obsoleto y establece que el tiempo de ejecución ya no arroja esta excepción. – casperOne
@casperOne: notado, pero NH 3.2 está compilado contra .NET 3.5. –