Question

Existe-t-il un moyen de déclencher une récupération de place dans un processus .NET à partir d'un autre processus ou de l'intérieur de WinDBG?

Il existe des assistants de débogage gérés qui forcent une collection lorsque vous vous déplacez sur une limite native / gérée, et AQTime semble avoir un bouton suggérant de le faire, mais je ne trouve aucune documentation sur la façon de le faire.

Était-ce utile?

La solution 3

La solution de John Cocktoastan consistant à utiliser GC.Collect dans Visual Studio est la meilleure option dans ce cas.

Je ne trouve toujours pas d'alternative pour effectuer la collecte sous WinDBG, mais je reviens au problème de "Quelle quantité de mémoire est récupérable?" (Voir mon commentaire à la réponse de John) Je pense qu'il existe une alternative en utilisant un script ( PowerDBG ?) Effectuez une recherche en combinant! DumpHeap et! GCRoot pour trouver les descripteurs non rootés et additionner l'espace utilisé (émulez en fait l'algorithme que le GC ferait à l'aide du débogueur). Mais depuis que je pense à cela, je n’ai pas eu l’un de ces bugs, je n’ai donc pas essayé d’écrire le code pour le faire.

Autres conseils

Eh bien ... il y a la fenêtre immédiate. Si vous avez le luxe de vous attacher au processus, j’ai supposé que vous pouviez manuellement GC.Collect dans la fenêtre immédiate.

Plus grande question: pourquoi voudriez-vous induire manuellement GC.Collect? C'est une mauvaise habitude et un indice de problèmes de conception beaucoup plus importants.

Répondu dans une autre question :

En gros, utilisez PerfView :

PerfView.exe ForceGC [ProcessName | Process ID] /AcceptEULA

Il n'est pas destiné à une utilisation en production.

Si vous exposez une fonction / un objet via l'accès distant, vous pouvez le faire assez facilement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top