Pergunta

Atualmente uso um DataTable para obter resultados de um banco de dados que posso usar em meu código.

No entanto, muitos exemplos na web mostram o uso de um DataSet e o acesso à(s) tabela(s) através do método de coleções.

Existe alguma vantagem, em termos de desempenho ou não, de usar DataSets ou DataTables como método de armazenamento para resultados SQL?

Foi útil?

Solução

Realmente depende do tipo de dados que você está trazendo.Como um DataSet é (na verdade) apenas uma coleção de objetos DataTable, você pode retornar vários conjuntos distintos de dados em um único objeto e, portanto, mais gerenciável.

Em termos de desempenho, é mais provável que você obtenha ineficiência com consultas não otimizadas do que com a escolha "errada" da construção .NET.Pelo menos, essa tem sido minha experiência.

Outras dicas

Uma diferença importante é que os DataSets podem conter várias tabelas e você pode definir relacionamentos entre essas tabelas.

Se você estiver retornando apenas um único conjunto de resultados, eu acho que um DataTable seria mais otimizado.Eu acho que deve haver alguma sobrecarga (considerada pequena) para oferecer a funcionalidade que um DataSet oferece e controlar vários DataTables.

em 1.x costumava haver coisas que DataTables não podiam fazer e que DataSets podiam (não lembro exatamente o que).Tudo isso foi alterado em 2.x.Meu palpite é que é por isso que muitos exemplos ainda usam DataSets.DataTables devem ser mais rápidos, pois são mais leves.Se você estiver obtendo apenas um único conjunto de resultados, é sua melhor escolha entre os dois.

Um recurso do DataSet é que se você puder chamar diversas instruções select em seus procedimentos armazenados, o DataSet terá uma DataTable para cada uma.

Existem algumas otimizações que você pode usar ao preencher um DataTable, como chamar BeginLoadData(), inserir os dados e depois chamar EndLoadData().Isso desativa alguns comportamentos internos do DataTable, como manutenção de índice, etc.Ver Este artigo para mais detalhes.

De qualquer forma, quando você está lidando apenas com uma única tabela, a maior diferença prática que descobri é que o DataSet possui um método "HasChanges", mas o DataTable não.Ambos têm um "GetChanges", então você pode usá-lo e testar se há nulo.

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