yugioh invocar funciona example español como collector clean c# .net garbage-collection

c# - invocar - garbage collector yugioh



¿Debemos utilizar la recolección de basura de la “estación de trabajo” o la recolección de basura del “servidor”? (3)

.NET 4.5 introduce la recolección de basura del servidor concurrente.

http://msdn.microsoft.com/en-us/library/ee787088.aspx

specify <gcServer enabled="true"/> specify <gcConcurrent enabled="true"/> (this is the default so can be omitted)

Y ahí está el nuevo SustainedLowLatencyMode;

En .NET Framework 4.5, el modo SustainedLowLatency está disponible tanto para la estación de trabajo como para el servidor GC. Para activarlo, establezca la propiedad GCSettings.LatencyMode en GCLatencyMode.SustainedLowLatency.

Tengo una gran aplicación C # de múltiples subprocesos que se ejecuta en un servidor de cuatro vías de múltiples núcleos. Actualmente estamos utilizando la recolección de basura "modo servidor". Sin embargo, las pruebas han demostrado que el modo de estación de trabajo GC es más rápido.

MSDN dice :

Las aplicaciones de código administrado que utilizan la API del servidor reciben importantes beneficios de usar el recolector de basura (GC) optimizado por el servidor en lugar del GC de la estación de trabajo predeterminada.

La estación de trabajo es el modo GC predeterminado y el único disponible en computadoras con un solo procesador. La estación de trabajo GC está alojada en la consola y en las aplicaciones de Windows Forms. Realiza colecciones completas (generación 2) al mismo tiempo que el programa en ejecución, lo que minimiza la latencia. Este modo es útil para las aplicaciones cliente, donde el rendimiento percibido suele ser más importante que el rendimiento bruto.

El servidor GC está disponible solo en computadoras multiprocesador. Crea un montón y subproceso administrado por separado para cada procesador y realiza colecciones en paralelo. Durante la recopilación, todos los subprocesos administrados se detienen (los subprocesos que ejecutan el código nativo se detienen solo cuando se devuelve la llamada nativa). De esta manera, el modo GC del servidor maximiza el rendimiento (el número de solicitudes por segundo) y mejora el rendimiento a medida que aumenta el número de procesadores. El rendimiento brilla especialmente en equipos con cuatro o más procesadores.

Pero no estamos viendo el rendimiento brillar !!!! ¿Alguien tiene algún consejo?


No se explica muy bien, pero por lo que puedo decir, el modo de servidor es síncrono por núcleo, mientras que el modo de estación de trabajo es asíncrono.

En otras palabras, el modo de estación de trabajo está destinado a un pequeño número de aplicaciones de larga ejecución que necesitan un rendimiento constante. La recolección de basura intenta "mantenerse fuera del camino" pero, como resultado, es menos eficiente en promedio.

El modo de servidor está destinado a aplicaciones en las que cada "trabajo" tiene una vida relativamente corta y es manejado por un solo núcleo (edición: piense en el servidor web de varios subprocesos). La idea es que cada "trabajo" obtiene toda la potencia de la CPU y se realiza rápidamente, pero que, en ocasiones, el núcleo deja de manejar las solicitudes y limpia la memoria. Entonces, en este caso, la esperanza es que GC sea más eficiente en promedio, pero el núcleo no está disponible durante su ejecución, por lo que la aplicación debe poder adaptarse a eso.

En su caso, suena como que, debido a que tiene una sola aplicación cuyos hilos están relativamente acoplados, se ajusta mejor al modelo esperado por el primer modo que por el segundo.

Pero eso es todo justificación después del hecho. Mida el rendimiento de su sistema (como dijo ammoQ, no el rendimiento de su GC, sino qué tan bien se comporta su aplicación) y utilice lo que mida para ser el mejor.


Servidor : su programa es la única aplicación significativa en la máquina y necesita la latencia más baja posible para los GC.

Estación de trabajo : tiene una interfaz de usuario o comparte la máquina con otro proceso importante