Ваши варианты заставляя GC от внешнего процесса
1) Присоединить отладчик с API и вызвать метод GC.Collect(), используя этот API. Я попытался сделать это с PerfView изначально, но он не работает, если процесс заблокирован в собственном коде (отладчик не присоединяется, пока он не запускает управляемый код еще раз), что было неприемлемым.
2) Внесите профайлер (который с V4.5 вы можете сделать с приложением) и вызовите API для этого, чтобы сделать GC. Это работает (при условии, что другой профилировщик еще не подключен). Это действительно то, что делает PerfView.
3) Используйте отслеживание событий для Windows (ETW). Начиная с V4.5 среды выполнения, существует ключевое слово GCHeapCollect, которое, если установлено, заставит среду выполнения выполнить полный GC. Для включения ETW-провайдеров вам необходимо быть администратором, поэтому это работает, только если вы контролируете процесс, может быть администратором. Если вы хотите сделать это, используя пакет TraceEvent Nuget (см. http://blogs.msdn.com/b/vancem/archive/2014/03/15/walk-through-getting-started-with-etw-traceevent-nuget-samples-package.aspx) Обычно ETW отправляет запрос ко всем процессам в системе, но вы можете сделать его специфичным для процесса (на Win 8 или новее) с помощью TraceEventProviderOptions.
Обратите внимание, что все это не предназначено для случайного использования. Вы должны быть чем-то вроде отладчика или профилировщика, чтобы делать такие вещи. Принудительные GC в других процессах без их участия, как правило, зла ....
Vance Morrison .NET Performance Architect.
Почему вы даже хотите? –
Что проголосовало? –
Я не делал downvoting, но если вы посмотрите на текст кнопки, он говорит: «Этот вопрос не показывает никаких исследований, он неясен или не полезен». В то время, когда вы проводили нисходящий опрос, у вас не было никаких исследований, вероятно, почему это было приостановлено. –