Pergunta

Existe uma maneira para acionar uma coleta de lixo em um processo .NET de outro processo ou de dentro WinDBG?

Não são os assistentes de depuração gerenciados que forçam uma coleção como você se move através de um nativo / gerenciado limite, e AQTime parece ter botão que sugere que ele faz isso, mas não consigo encontrar qualquer documentação sobre como fazê-lo.

Foi útil?

Solução 3

A resposta de John Cocktoastan usar GC.Collect quando em Visual Studio é a melhor opção se houver.

Eu ainda não consigo encontrar uma alternativa para realmente fazer a coleção sob WinDBG mas tendo um passo para trás para o problema da "Quanta memória é recuperável?" (Ver o meu comentário à resposta de John) eu acho que há uma alternativa, usando um script ( PowerDBG ?) procurar através de alguma combinação de! dumpheap e! gcroot para encontrar as alças não enraizadas e totalizar o espaço utilizado (basicamente emular o algoritmo que o GC faria usando o depurador). Mas desde que o pensamento deste Eu não tive um desses erros, portanto, não têm tentado escrever o código para fazê-lo.

Outras dicas

Bem ... há a janela imediata. Se você tem o luxo de anexar ao processo, eu supunha que podia manualmente GC.Collect na janela imediata.

grande questão: por que você quer para induzir manualmente GC.Collect? É um hábito desagradável, e indicativo de problemas de design muito maiores.

outra pergunta :

Basicamente, use PerfView :

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

Não é destinado para uso em produção.

Se você expor uma função / objeto através de comunicação remota, que poderia ser feito com bastante facilidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top