Запуск сборника мусора .NET извне
Есть ли способ вызвать сборку мусора в .NET-процессе из другого процесса или изнутри WinDBG?
Есть управляемые помощники для отладки, которые заставляют коллекцию перемещаться по родной/управляемой границе, а AQTime, похоже, имеет кнопку что он делает это, но я не могу найти документацию о том, как это сделать.
Ответы
Ответ 1
John Cocktoastan отвечает за использование GC.Collect, когда в Visual Studio это лучший вариант, если есть.
Я до сих пор не могу найти альтернативу тому, как на самом деле собирать коллекцию под WinDBG, но сделав шаг назад к проблеме "Сколько памяти исправляется?" (см. мой комментарий к Джону). Я думаю, что есть альтернатива, используя сценарий (PowerDBG?) поиск через некоторую комбинацию! DumpHeap и! GCRoot, чтобы найти некорневые дескрипторы и общее количество используемого пространства (в основном, эмулировать алгоритм, который GC будет делать с помощью отладчика). Но поскольку мы думали об этом, у меня не было одной из этих ошибок, поэтому я не пытался написать код, чтобы сделать это.
Ответ 2
Ну... там ближайшее окно. Если у вас есть возможность подключиться к процессу, я предположил, что вы можете вручную GC.Collect в ближайшем окне.
Большой вопрос: зачем вы хотите вручную вызывать GC.Collect? Это неприятная привычка и указывает на гораздо большие проблемы с дизайном.
Ответ 3
Отвечено в другом вопросе:
В принципе, используйте PerfView:
PerfView.exe ForceGC [ProcessName | Process ID]
Он не предназначен для использования в производстве.
Ответ 4
Если вы выставляете функцию/объект через удаленный доступ, это можно сделать довольно легко.