2009-04-27 9 views
20

tiene a alguien utiliza una configuración que permite el recolector de basura optimizado para máquinas multi-procesador utilizando Aspnet.config con:
Experiencia en el uso gcServer = "true" para establecer recolector de basura para .NET

<gcServer enabled="true"/> 
<gcConcurrent enabled="true"/> 

Hubo una mejora en el desempeño de su sitio?
¿Hay algún problema?

+0

Consulte [aquí] (https://stackoverflow.com/a/6251689/4140278) probablemente obtendrá la respuesta –

Respuesta

19

En primer lugar, concurrente y el servidor son opciones mutuamente excluyentes. Consulte this blog post para obtener más información sobre los conceptos erróneos del servidor GC. Sin embargo, ASP.NET, de forma predeterminada, aloja el servidor GC (consulte Scott Hanselman's discussion), por lo que no habrá diferencia.

Recomendaría seguir con el servidor en lugar de concurrente para un sitio web ASP.NET. Para una aplicación en modo de usuario, el GC concurrente ha sido receptividad del usuario, ya que el gc del servidor causará "cuelga".

He utilizado el servidor GC, y noté mejoras significativas en ciertas situaciones.

El modo de servidor GC sí ayuda a las aplicaciones de usuario, sin embargo, si su aplicación de usuario está trabajando con enormes grupos de memoria, se está fragmentando.

+7

Esto está cambiando en 4.5, que presenta ** servidor concurrente GC **: http: // msdn. microsoft.com/en-us/library/ms229357.aspx – skolima

+0

@skolima Sí, de nuevo, simplemente lo dejas como "servidor" y automáticamente usa el nuevo servidor concurrente GC –

2

En pocas palabras, el modo GC de la estación de trabajo mejora el rendimiento para un solo usuario, mientras que el modo GC del servidor está diseñado para su uso en un programa que tiene múltiples solicitudes todo el tiempo. Realmente espero que esta pregunta no sea un síntoma de un problema mucho más grande. a veces, cuando las personas comienzan a cuestionar al recolector de basura, es porque no están viendo la huella de memoria que estaban esperando. no esperes grandes ganancias con un recolector de basura diferente. En casi todas las pruebas que he hecho, hay poca diferencia de qué recopilador está utilizando.

2

(pregunta muy antigua, lo sé, pero pensé que añadir esto de todos modos)

Hay una diferencia importante entre el servidor de GC y GC concurrente: el GC Server tiene un hilo por procesador y suspende las roscas ese procesador cuando se realiza una recopilación, el servidor Concurrent GC thread se ejecuta en paralelo con los otros hilos, es decir, sin suspensión. Ver this MSDN article for more info y diferencias más sutiles.

Dependiendo del tiempo que tome un ciclo, esto puede marcar una gran diferencia en la capacidad de respuesta del usuario de la aplicación, por lo que debe elegir sabiamente. En el caso de ASP.NET, que no tiene una interfaz de usuario, Server GC es la opción mejor (y predeterminada).

Cuestiones relacionadas