Внешний запуск сборки мусора .NET - PullRequest
19 голосов
/ 19 сентября 2008

Есть ли способ запустить сборку мусора в .NET-процессе из другого процесса или из WinDBG?

Существуют помощники по управляемой отладке, которые заставляют коллекцию перемещаться через собственную / управляемую границу, и AQTime , кажется, имеет кнопку, которая предлагает это сделать, но я не могу найти никакой документации как это сделать.

Ответы [ 4 ]

11 голосов
/ 19 сентября 2008

Ну ... есть ближайшее окно. Если у вас есть возможность присоединиться к процессу, я предположил, что вы можете вручную собрать GC.Collect в ближайшем окне.

Большой вопрос: зачем вам вручную вызывать GC.Collect? Это неприятная привычка, которая свидетельствует о гораздо больших проблемах дизайна.

10 голосов
/ 02 февраля 2016

ответил в другой вопрос :

В основном используйте PerfView :

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

Не предназначен для производственного использования.

2 голосов
/ 29 августа 2009

Ответ Джона Коктоастана на использование GC.Collect в Visual Studio - лучший вариант, если он есть.

Я до сих пор не могу найти альтернативу, чтобы фактически сделать сборку под WinDBG, но возвращаюсь к проблеме «Сколько памяти можно восстановить?» (см. мой комментарий к ответу Джона). Я думаю, что есть альтернатива, использующая поиск по сценарию ( PowerDBG ?) через некоторую комбинацию! DumpHeap и! GCRoot, чтобы найти дескрипторы без рута и общий объем используемого пространства. (в основном эмулирует алгоритм, который GC будет делать с использованием отладчика). Но, подумав об этом, у меня не было ни одной из этих ошибок, поэтому я не пытался написать код для этого.

0 голосов
/ 19 сентября 2008

Если вы выставите функцию / объект с помощью удаленного взаимодействия, это можно сделать довольно легко.

...