Memory leaks em aplicações Sharepoint – SPDisposeCheck

Seu servidor Sharepoint tem constantes piques de memória ao utilizar determinadas webparts, conteúdos ou aplicações integradas ao Sharepoint ?

Esses piques de memória, além de impossibilitar a utilização correta dessa determinada funcionalidade, impacta no restante das aplicações executadas naquele servidor, podendo deixar diversas outras funcionalidades do sharepoint indisponíveis, ou com estabilidade intermitente.

No nosso cenário, para chegar a conclusão de que o problema está ligado à “má” (ou inexistente) liberação dos recursos alocados pelos métodos internos da API do Sharepoint, foi necessário executar um profile na memória com objetivo de identificar quais objetos estavam ocupando mais memória e em que velocidade eles estavam sendo criados.
Para isso, recomendo o famoso produto da Red Gate – ANTS Memory Profiler. Vale conferir a versão trial.

Após identificar que a aplicação estava criando – diretamente e indiretamente – desesperadamente, centenas de instâncias das classes SPWeb e SPSite, partimos para análise da lógica desenvolvida.

Diversos pontos onde instâncias da classe SPWeb não estavam sendo liberadas, foram facilmente resolvidos, porém, sabemos que várias funções da própria API do Sharepoint instanciam diversos SPWeb e SPSite. Isso se torna ainda mais crítico quando se sabe que existem recursos não gerenciados (DLL COM) atrelados à essas instâncias que ficam soltos, e que não serão liberados automaticamente.
Sabendo disso, temos que identificar a chamada à essas APIs, e mais do que isso, avaliar em quais propriedades essas instâncias estão referenciadas para podermos libera-las.

Para facilitar esse processo, existe uma ferramenta chamada SPDisposeCheck – SharePoint Dispose Checker Tool, disponível aqui.
Esse utilitário é uma mão na roda, pois ele examina os binários a procura de padrão de codificação que não respeita as melhores práticas de desenvolvimento para Sharepoint utilizando classes que implementam IDisposable. O artigo é um pouco antigo mas ainda vale muito a pena ler.
Você pode também dar uma lida na sua versão atualizada para o Sharepoint 2010.

Apesar de desenvolvida por funcionários da Microsoft, não é uma ferramenta suportada pela Microsoft, logo, qualquer dúvida deve ser sanada nos foruns MSDN relativos à desenvolvimento sharepoint.

Caso sua empresa esteja passando por algum problema relacionado ao Sharepoint ou necessitar de qualquer auxílio em relação à assuntos Sharepoint/Portais corporativos em geral, acione nossa equipe de especialistas.