Exécuter garbage collector en ligne de commande?
Est-il possible d'exécuter .NET garbage collector en ligne de commande, par exemple, sans avoir à écrire de code?
Edit:
Lorsque l'on pose cette question, je voulais dire exactement ce qu'a demandé ici pour garbage collector Java:
Donc, si il ya un moyen de le faire dans la JVM, voir aucune raison qu'il n'existerait pas .NET
Pour ramasser les ordures d'où?
De certains processus. Je veux de la force de GC pour certains diagnostics. Il ne fait pas partie de mon code.
Inutile de répondre: à l'intérieur de PowerShell, exécutez
Je suppose qu'il peut y avoir certains outil, que l'on peut appeler GC pour certains processus (disons ID). Comme toolname.exe /GC /pid:1234. Grâce à Darin Dimitrov, je sais qu'il n'est pas d'un tel outil. Mais il pourrait l'être, si j'ai posé cette question pour être sûr. Et je pense toujours que ce est la question juridique et ne comprends pas pourquoi vous downvote?
De certains processus. Je veux de la force de GC pour certains diagnostics. Il ne fait pas partie de mon code.
Inutile de répondre: à l'intérieur de PowerShell, exécutez
[gc]::Collect(0)
pour exécuter une génération 0 collection dans le processus. Mais pourquoi voudrait-on le faire?Je suppose qu'il peut y avoir certains outil, que l'on peut appeler GC pour certains processus (disons ID). Comme toolname.exe /GC /pid:1234. Grâce à Darin Dimitrov, je sais qu'il n'est pas d'un tel outil. Mais il pourrait l'être, si j'ai posé cette question pour être sûr. Et je pense toujours que ce est la question juridique et ne comprends pas pourquoi vous downvote?
OriginalL'auteur Kamarey | 2010-08-29
Vous devez vous connecter pour publier un commentaire.
Il y a une option, mais je n'ai aucune idée si c'est "la production de la sécurité". C'est, je ne sais pas quel est le risque que la cible, le processus se bloque. Mais si elle est utilisée pour le dépannage et/ou de l'analyse, il peut venir dans maniable.
Vous pouvez utiliser PerfView pour la fin:
Ou pour citer le
PerfView.exe /?
de sortie:Le "problème" ici, c'est que cela va ouvrir une nouvelle fenêtre de la console et, après qu'il est terminé, vous invite à fermer cette fenêtre.
PerfView.exe sera toutefois dump une flopée de fichiers exécutables à
%APPDATA%\PerfView\_version_
qui sont emballés à l'intérieur de la PerfView.exe exécutable en tant que ressources.Donc, une fois que vous avez exécuté l'PerfView.exe de commande, vous pouvez appeler la
HeapDump.exe
outil manuellement (dans mon cas sur x64 boîte et avec l'ID de processus 15396):Exemple de sortie ressemble à ceci:
Veuillez noter, que le ci-dessus est autant que je sache, non officiel, de l'utilisation de l'outil et peut arrêter de travailler avec les nouvelles versions. Et, bien sûr, PerfView peut faire beaucoup plus que juste forcer un GC (démarrer ici).
En interne, le ci-dessus utilise la ICorProfilerInfo::ForceGC interface de profilage/méthode qui vient avec le CLR (source. La rédaction d'un "simple" /"autonome" de l'outil pour que le but n'est donc pas totalement hors de question. Non tâche triviale jamais le moins.
Mise à jour: PerfView en tant que tel est maintenant open source et l'outil parlé ci-dessus en fait partie. Dans le cas où vous êtes curieux.
En essayant de le faire dans ASP.NET en résulte un "Système.UnauthorizedAccessException: Accès refusé." dans
ICLRProfiling.AttachProfiler
assurez-vous que vous avez les autorisations appropriées pour le faire (l'utilisateur de perfview.exe contre l'utilisateur qui exécute IIS).
OriginalL'auteur Christian.K
Le garbage collector s'exécute à l'intérieur d'un processus. Donc, si vous voulez exécuter le garbage collector pour ce processus, vous pouvez essayer les GC.Recueillir méthode. Vous ne pouvez pas forcer la collecte des ordures pour un processus donné de l'extérieur.
Notez également qu'en forçant la collecte des déchets (à l'aide de la
GC.Collect
) la méthode est considéré comme une mauvaise pratique et doit être évitée.Il n'y a pas d'outil de Microsoft et je n'ai jamais entendu parler d'aucun outil 3ème partie capable de le faire. Chaque processus a sa propre GC tas, et donc son propre GC fils, afin de le forcer à un GC Collection sur un autre processus, autant que je sache, c'est impossible.
il n'y a pas d'outil de Microsoft (et je doute qu'un outil 3ème partie). Chaque processus a sa propre GC tas, et donc son propre GC fils, afin de le forcer à un GC Collection sur un autre processus, pour autant que je sais, c'est impossible.
comment est-il pas pertinent indiquant aucun il ne peut pas le faire et de vous donner la raison?
Ok, merci. Donc, pouvez-vous remplacer votre réponse à votre dernier commentaire, il va répondre à ma question?
Concernant le "pas d'outil de Microsoft". Apparemment, il est possible ("maintenant" eh bien, depuis 2012 😉 à l'aide de "PerfView". Voir ma réponse pour plus de détails, une des mises en garde.
OriginalL'auteur Darin Dimitrov
JetBrains dotTrace permet de faire appel à la collecte des ordures lorsque vous êtes attaché à un processus et à la capture d'une trace. Donc, il y a un moyen...
http://www.jetbrains.com/profiler/
OriginalL'auteur ewassef
Cet outil permet de forcer la collecte des ordures.. Il doit être démarré avant que le processus que vous souhaitez travailler avec, de sorte que son pas tout à fait à ce que vous recherchez.
http://www.yourkit.com/dotnet/download/index.jsp
http://www.yourkit.com/docs/index.jsp
OriginalL'auteur Mel