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?

Foi útil?

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.

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