Detectando objetos descartáveis de ID "vazados"
Existem muitas perguntas para perguntar como detectar vazamentos de objetos IDisposable. Parece que a resposta é"você não pode".
Acabei de verificar com o caso de teste mais trivial, que o FxCop 10.0 não faz, o ReSharper 4 com MSVS2010 não faz.
Isso me parece errado, pior do que vazamentos de memória em C (pelo qual pelo menos estabelecemos ferramentas para detectar).
Eu estava pensando: É possível, usando reflexão e outras técnicas avançadas obscuras, que eu possa injetar uma verificação em tempo de execução, no finalizador, para ver seDispose
tem sido chamado?
Que tal truques de mágica com o WinDBG + SOS?
Mesmo se não houver ferramentas para fazer isso, eu gostaria de saber se isso é teoricamente possível (meu C # não é muito nítido).
Idéias?
NOTA O título desta pergunta pode ter sido enganador. A verdadeira questão aqui deve serse umIDisposable
objeto foiDisposed()
devidamente. Ser descartado pelo GC não conta, já que considero isso um erro.
Editar: Solução: O .NET Memory Profiler faz o trabalho. Só precisamos enviar spam para váriosGC.Collect()
no final do programa, para permitir que nosso criador de perfis receba as estatísticas corretamente.