web-dev-qa-db-fra.com

Qu'est-ce que la récupération de place du serveur dans ASP.NET Core?

J'ai mis à niveau un projet ASP.NET Core vers VS2017 et le nouveau csproj. Cette option est disponible:

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

Qu'est-ce que la récupération de place sur le serveur? Il n'y a pas de documentation appropriée, juste un guide de migration qui suppose que vous savez déjà ce que c'est.

(Sauf s'il existe un document officiel, dans ce cas, veuillez me le faire savoir.)


Résumé: Malheureusement, la documentation ne contient aucun détail sur la plupart des technologies sous-jacentes. Cependant, le lien de @ PanagiotisKanavos contient un élément important concernant "serveur gc" ici .

21
grokky

Cela semble être la différence entre les stratégies de récupération de place Garbage normale (Workstation) et concurrente (Server). Fondamentalement, l’approche Workstation se heurte à des problèmes dans de nombreux cas extrêmes. Et les scénarios massivement multithreads (comme les serveurs Web ASP) sont des exemples parfaits d'un tel cas extrême:

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

Notez que le GC simultané a des problèmes naturels avec des références faibles et une défragmentation, mais si cela s'applique à la mise en œuvre .NET Core, cela dépasse mes connaissances. L’équipe .NET Core pourrait apporter d’améliorations au code. C’est le point de vue de la conception d’un gestionnaire de mémoire pour le GC.

Peut-être que cela ne définit que le nombre de threads simultanés qui seront utilisés pour la partie de balisage (la valeur par défaut du poste de travail étant 1). Il peut également inclure des stratégies d’allocation de mémoire modifiées pour éviter des problèmes tels que la défragmentation . Dans les deux cas, la collection réelle devra par nature fonctionner avec un seul thread, arrêter tous les threads gérés et sera limitée par la vitesse de la mémoire, et non par celle du processeur.

13
Christopher

documentation msdn ... 

https://msdn.Microsoft.com/en-us/library/ms229357(v=vs.110).aspx

Le Common Language Runtime (CLR) prend en charge deux types de récupération de place: la récupération de place de poste de travail, disponible sur tous les systèmes, et la récupération de place de serveur, disponible sur les systèmes multiprocesseurs. Vous utilisez l'élément pour contrôler le type de récupération de place effectuée par le CLR. Utilisez la propriété GCSettings.IsServerGC pour déterminer si le nettoyage de la mémoire du serveur est activé . Pour les ordinateurs à processeur unique, le nettoyage de la mémoire du poste de travail par défaut doit être l'option la plus rapide. La station de travail ou le serveur peuvent être utilisés pour des ordinateurs à deux processeurs. La récupération de place du serveur doit être l'option la plus rapide pour plus de deux processeurs . Cet élément ne peut être utilisé que dans le fichier de configuration de l'application. il est ignoré s'il se trouve dans le fichier de configuration de la machine.

6
wels1200

Lorsque en migrant sur , la variable ServerGarbageCollection est mappée à partir du System.GC.Server.

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

Qu'est-ce que la récupération de place sur le serveur?

Simplement, il s’agit d’une valeur de configuration qui demande au moteur d’exécution .net d’effectuer le nettoyage de serveur . Historiquement cela a été géré par le project.json . Il active/désactive la récupération de place du serveur.

C'est le document officiel le plus proche que vous puissiez trouver. Il s'agit d'une annonce concernant l'ajout de cette option dans le project.json.

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

De même, des détails supplémentaires ici:

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

5
David Pine

Il bascule le GC entre le serveur (plus d'un processeur) et le poste de travail (1 processeur).

1
Shadi Namrouti