Il existe une option, bien que je ne sache pas si c'est "production sûre". Autrement dit, je ne sais pas à quel point le risque est élevé, que le processus cible se bloque. Mais s'il est utilisé pour le dépannage et/ou l'analyse, il pourrait être utile.
Vous pouvez utiliser PerfView dans le but:
PerfView.exe ForceGC [ProcessName | Process ID]
Ou pour citer la sortie PerfView.exe /?
:
... Utilisation: PerfView ForceGC processus
Force une GC sur le processus spécifié
Paramètres: Processus L'ID de processus ou nom de processus (Exe sans extension) du processus pour forcer un GC. ...
Le « problème » est ici, que cela va ouvrir une nouvelle fenêtre de la console et, après cela est fait, vous invite à fermer cette fenêtre. Perfiew.exe va cependant vider un grand nombre d'exécutables à %APPDATA%\PerfView\_version_
qui sont emballés dans l'exécutable PerfView.exe en tant que ressources.
Ainsi, une fois que vous avez exécuté la commande PerfView.exe, vous pouvez appeler l'outil HeapDump.exe
manuellement (dans mon cas sur la boîte x64 et processus ID 15396):
cd C:\Users\MyUserName\AppData\Roaming\PerfView\VER.2014-02-04.09.06.52.000\AMD64
HeapDump.exe /ForceGC 15396
Exemple de sortie ressemble à:
Loading the ETWClrProfiler.
Turning on debug privilege.
Highest Runtime in process is version v4.0.30319
0,0s: Trying to attach a profiler.
0,1s: Done Attaching ETLClrProfiler ret = 0
Attached ETWClrProfiler.
0,1s: Enabling JScript Heap Provider
0,1s: Enabling EtwClrProfiler
0,1s: Enabling CLR GC events
0,1s: Requesting a JScript GC
0,1s: Requesting a DotNet GC
4,0s: .NET GC Starting at 0,15s.
4,0s: .NET GC stats, at 0,16s Survived 2221152.
6,0s: .NET GC complete at 0,17s.
6,0s: Triggered .NET GC, No JScript heap detected
6,1s: Requesting ETWClrProfiler unload.
6,1s: Shutting down ETW session
[ 6,1s: Done forcing GCs success=True]
Veuillez noter que ce qui précède est AFAIK l'utilisation non officielle de l'outil et pourrait cesser de fonctionner avec les nouvelles versions. Et, bien sûr, PerfView peut faire beaucoup plus que simplement forcer un GC (démarrer here).
En interne, l'utilise au-dessus de l'interface de profilage ICorProfilerInfo::ForceGC/méthode qui vient avec le CLR (source. L'écriture d'un outil « plus simple »/« autonome » à cette fin est donc pas totalement hors de question. Tâche non triviale jamais . moins
Mise à jour: PerfView en tant que telle est maintenant open source et l'outil a parlé ci-dessus is part of it Si vous êtes curieux
pour ramasser les ordures d'où –
de certains processus, je veux forcer GC..?. pour certains diagnostics.Il ne fait pas partie de mon code – Kamarey
eless answer: dans PowerShell, lancez [gc] :: Collect (0) 'pour lancer une collection gen 0 dans le processus. Mais pourquoi voudrait-on faire ça? – Richard