Perfil do CLR - Anexar ao processo existente
Pergunta
Eu gostaria de usar algo como o CLR Perfis .Net 2.0 para ver objetos que estão tendo mais espaço na pilha em qualquer determinado período de tempo (de uma ASP.Net processo de trabalho).
No entanto, o perfil do CLR só me permite INICIAR um aplicativo, não anexar a um já existente.Suponho que isso é porque ele controla atribuições e GC também, mas eu não estou muito interessado nisso.Eu gostaria apenas de algo que tira um instantâneo do estado atual da pilha, e me mostra o que é, e como muitos objetos de cada tipo existem, e quantos bytes total estão sendo utilizados por cada tipo de objeto.
Qualquer idéias?
Solução
.Net Memória Profiler é exatamente o que você precisa.Ele não é livre, mas há uma versão de avaliação.Na verdade, eu usei a versão de avaliação para localizar vazamentos no nosso último projeto.Uma característica notável é:
Facilmente identificar vazamentos de memória por a recolha e comparação de instantâneos de .NET memória
Eu acho que isso é o que procura.
Outras dicas
- Anexar um depurador
cdb-p
- carregar .net extensões de depurador
.loadby sos mscorwks
- despejo de pilha em um formato de CLRProfiler entende
!TraverseHeap heap.txt
- desanexar depurador
qd
- carga heap.txt no clrprofiler app
Este artigo do MSDN fala sobre como usar o perfil do CLR para comparar instâncias da pilha.Você está certo de que você não pode, atualmente, anexar perfil do CLR para um processo em execução (o artigo explica por que razão), mas, por que vale a pena, parece que você vai ser capaz de em breve.
Você já se olhou no RedGates .NET Profiler?
Sua sido um tempo desde que eu usei, mas estou espécie certeza de que você pode anexar a qualquer CLR processo a qualquer momento.