sexta-feira, 19 de setembro de 2008

Artigo Nº 10: Cuidados com Performance em ASP.NET

Olá a todos...
Devido a alguns problemas nesse sentido andei pesquisando sobre o assunto, e objetivo aqui não é comparar qual a melhor maneira de utilizar os dois métodos, mas apenas alertar para possíveis esquecimentos que podem trazer sério problemas de performance às aplicações .NET.

DataReader x DataSet

DataReader
- É um objeto somente leitura e adiante, ou seja, não podemos navegar aleatoriamente utilizando este objeto;
- Trabalha conectado ao banco, deste modo, enquanto estivermos utilizando-o para extração de dados do banco, estaremos "pendurados" em uma conexão;
- Trabalha apenas com uma tabela por vez, ou seja, você deve configurar a string sql para a primeira tabela, conectar no banco, coletar suas informações e desconectar do banco. Para a segunda tabela você deverá fazer tudo novamente.
Observação importante: A conexão utilizada pelo DataReader deve ser aberta e fechada manualmente (exceto quando você informa que ela deverá ser fechada automaticamente)
DataSet
- Funciona como um cache in-memory, ou seja, você terá sua tabela totalmente disponível para uso, podendo fazer acesso aleatório às rows, inserir, alterar e deletar registros à tabela;
- Trabalha desconectado do banco, deste modo, trabalharemos com os registros sem ocupar uma conexão do banco;
- Trabalha com n tabelas por vez, disponibilizando, inclusive, a possibilidade de relacionamento entre as mesmas, dentre outras funcionalidades.
Observação importante: A conexão utilizada pelo DataSet não necessita ser aberta e/ou fechada manualmente. Ao chamar o método Fill do DataAdapter a conexão é aberta, são coletados os dados solicitados e a conexão é fechada.


Observação sobre os objetos Connection: É importante ressaltar que todas as conexões abertas manualmente devem ser fechadas manualmente (exceto quando chamar o ExecuteReader utilizando o CommandBehavior.CloseConnection). As conexões abertas e não fechadas, permanecerão abertas mesmo quando seu código estiver fora de escopo. As mesmas não serão fechadas automaticamente, e nem mesmo destruídas pelo Garbage Collector.


t+
Edinei