Вопрос

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

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

Это было полезно?

Решение 3

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

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

Другие советы

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

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

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

В основном используйте ПерфВью:

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top