visual tutorial studio net framework course asp c# .net asp.net-core .net-core csproj

tutorial - c# asp net



¿Qué es la recolección de basura del servidor en ASP.NET Core? (4)

Alterna GC entre Servidor (más de 1 procesador) o estación de trabajo (1 procesador).

He actualizado un proyecto Core de ASP.NET a VS2017 y al nuevo csproj, y existe esta opción:

<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>

¿Qué es la recolección de basura del servidor? No hay documentación adecuada, solo una guía de migración que asume que ya sabe lo que es.

(A menos que haya un documento formal, en cuyo caso, hágamelo saber).

Resumen: desafortunadamente, no hay detalles en la documentación de gran parte de la tecnología subyacente. Sin embargo, el enlace de @PanagiotisKanavos tiene el bit importante sobre "server gc" here .


Cuando se migra , el ServerGarbageCollection asigna desde System.GC.Server .

<PropertyGroup> <ServerGarbageCollection>true</ServerGarbageCollection> </PropertyGroup>

¿Qué es la recolección de basura del servidor?

Simplemente, es un valor de configuración que le indica al tiempo de ejecución .net que realice la recolección de basura del servidor . Históricamente esto fue gestionado por el project.json . Habilita / deshabilita la recolección de basura del servidor.

Esto es lo más cercano a un documento oficial que va a encontrar, es un anuncio sobre la adición de esta opción en el project.json .

https://github.com/aspnet/Announcements/issues/175

Asimismo, detalles adicionales aquí:

https://github.com/dotnet/coreclr/blob/master/Documentation/project-docs/clr-configuration-knobs.md#host-configuration-knobs


Parece ser la diferencia entre las estrategias de recolección de basura normal (estación de trabajo) y concurrente (servidor). Básicamente, el enfoque de la estación de trabajo tiene problemas en muchos casos extremos. Y los escenarios masivos de multiproceso (como los servidores web ASP) son los mejores ejemplos de un caso tan extremo:

https://social.msdn.microsoft.com/Forums/en-US/286d8c7f-87ca-46b9-9608-2b559d7dc79f/garbage-collection-pros-and-limits?forum=csharpgeneral

Tenga en cuenta que GC concurrente tiene problemas naturales con referencias débiles y desfragmentación, pero si eso se aplica a la implementación de .NET Core está fuera de mi conocimiento. Hay todo tipo de mejoras que el equipo de .NET Core podría hacer al código y esto se refiere al área de diseño de un administrador de memoria de GC.

Tal vez solo defina cuántos subprocesos simultáneos se utilizarán para la parte de etiquetado (con el valor predeterminado de la estación de trabajo siendo 1). También puede incluir algunas estrategias de asignación de memoria modificadas para evitar problemas como la desfragmentación. En cualquier caso, la colección real por naturaleza tendrá que ejecutar un solo hilo, detendrá todos los subprocesos gestionados y estará limitada por la velocidad de la memoria, no por la velocidad de la CPU.


msdn documentacion ...

this

El Common Language Runtime (CLR) admite dos tipos de recolección de basura: la recolección de basura de la estación de trabajo, que está disponible en todos los sistemas, y la recolección de basura del servidor, que está disponible en sistemas multiprocesador. Utiliza el elemento para controlar el tipo de recolección de basura que realiza el CLR. Use la propiedad GCSettings.IsServerGC para determinar si la recolección de basura del servidor está habilitada. Para computadoras con un solo procesador, la recolección de basura de la estación de trabajo predeterminada debería ser la opción más rápida. Se puede usar una estación de trabajo o un servidor para computadoras con dos procesadores. La recolección de basura del servidor debería ser la opción más rápida para más de dos procesadores. Este elemento solo se puede utilizar en el archivo de configuración de la aplicación; se ignora si está en el archivo de configuración de la máquina.