Estoy viendo algunos patrones inusuales de recolección de basura en .NET 4.0 que no puedo explicar, cualquier consejo sería apreciado.Patrones inusuales de recolección de basura
En varias ocasiones en la ejecución de mi programa, el recuento de la colección G2 comienza a aumentar y el tiempo de GC% llega a casi el 100%. Esto continúa durante un tiempo antes de detenerse (consulte la captura de pantalla del monitor de rendimiento a continuación). Durante este tiempo, una traza PerfView de los eventos CLR GC ETW muestra que varias colecciones G2 de larga ejecución se activan una detrás de la otra con el motivo 'AllocSmall'.
¿Alguien puede arrojar algo de luz sobre:
- Preciesly lo que provoca un 'AllocSmall' caso
- por qué estos están provocando directamente colección G2
- Por qué estas colecciones G2 se están produciendo espalda con espalda
LowMemory no parece ser el problema, ya que los eventos de inicio del GC no lo incluyen como su código de razón (http://msdn.microsoft.com/en-us/library/ff356162.aspx). También hemos visto situaciones similares en las que las colecciones G0 se producen consecutivamente.
Editar: Se ha sugerido que el desencadenador podría superar un umbral. Dado que todavía hay memoria disponible, esperaría que el G2 Heap se expandiera en este punto en lugar de que el GC thrash intente recopilar.
Editar: Las fotos publicadas a continuación son mucho mayor resolución que las pantallas StackOverflow - basta con abrir el enlace de imagen directamente en una pestaña del navegador.
Gracias por la respuesta. En estas circunstancias, espero que el G2 Heap se expanda, ya que todavía hay memoria disponible. ¿Alguien puede comentar por qué esto no ha sucedido? –