segunda-feira, 11 de abril de 2011

Dica ASP.NET 3: Pooling de conexão

Configurar a conexão TCP entre seu aplicativo web e o servidor SQL Server pode ser uma operação dispendiosa. Os desenvolvedores da Microsoft conseguiram tirar proveito do pooling de conexão já há algum tempo, o que os permite reutilizar as conexões com o banco de dados. Em vez de criar uma nova conexão TCP em cada solicitação, somente é criada uma nova conexão quando não há uma disponível para o pool de conexões. Quando a conexão for fechada, será retornada ao pool, onde permanecerá conectada ao banco de dados, em vez de desfazer totalmente essa conexão TCP.

Claro que é preciso ficar atento aos vazamentos de conexões. Sempre encerre suas conexões ao terminar de usá-las. Repito: não importa o que todos digam sobre a xoleta de lixo dentro do Microsoft .NET Framework, sempre chame Close ou Dispose explicitamente em sua conexão ao concluir o trabalho com ela. Não confie ao common language runtime (CLR) a limpeza e o encerramento de sua conexão em um momento predeterminado. O CLR acabará destruindo a classe e forçando o encerramento da conexão, mas você não terá garantias sobre quando a coleta de lixo daquele objeto realmente ocorrerá.

Para usar o pooling de conexões de maneira otimizada, há algumas regras que devem ser seguidas. Primeiro, abra a conexão, execute o trabalho e, em seguida, encerre a conexão. Não há problema em abrir e encerrar a conexão diversas vezes em cada solicitação se você precisar (o ideal é aplicar a dica 1), em vez de manter a conexão aberta e passá-la por diversos métodos. Segundo, use a mesma string de conexão (e a mesma identidade de thread, se estiver usando autenticação integrada). Se você não usar a mesma string de conexão, por exemplo, personalizando a string de conexão com base no usuário conectado, não obterá o mesmo nível de otimização oferecido pelo pooling de conexões. E se você usar a autenticação integrada ao representar uma grande quantidade de usuários, seu pooling também será muito menos eficiente. Os contadores de desempenho de dados do CLR do .NET podem ser muito úteis na tentaiva de identificar problemas de desempenho relacionados com o pooling de conexões.

Sempre que o aplicativo for conectar um recurso, como um banco de dados, em execução em outro processo, você deverá fazer a otimização enfocando o tempo gasto na conexão com o recurso, o tempo gasto no envio ou na obtenção de dados e no número de ciclos de ida e volta. Otimizar qualquer tipo de salto de processo no aplicativo é o primeiro passo para conseguir melhorar o desempenho.

A camada do aplicativo contém a lógica que conecta a camada de dados e transforma os dados em instâncias de classes e processos comerciais significativos.

0 comentários: