O que é mais rápido para resolver, DataSet.Tables ou Dictionary <string, Tabelas>

votos
2

Estou criando um banco de dados de simulação para testes de importação exportação (da leitura algoritmo e escrever estruturas de dados complexas para o nosso banco de dados, não apenas para testar operações de IO), e estou tentando decidir se a usar um DataSet para armazenar as tabelas de simulação (por mesa nome) na faux-banco de dados, ou Dictionary ()

Em termos de recuperação de uma tabela de dados pelo nome, eu esperaria melhor desempenho de, dataset.Tables [ TableName] ou dicionário < TableName> (a partir de Dictionary ()?

Publicado 10/12/2008 em 06:16
fonte usuário
Em outras línguas...                            


2 respostas

votos
4

DataSet.Tables é implementado internamente usando um ArrayList. Olhando para cima de uma mesa pelo nome envolve uma busca linear através das tabelas na lista e um monte de casting. Então, usando um dicionário, que é hash com base e genérica, quase certamente seria mais rápido. (Embora você precisa de um monte de tabelas e / ou um monte de acessos para ele fazer muita diferença.)

Respondeu 10/12/2008 em 06:29
fonte usuário

votos
7

Na verdade, Dictionary<,>muitas vezes é mais lento do que uma busca linear, devido às complexidades inerentes de fazer a lógica dicionário (Haches, baldes, etc). Em meus testes, o ponto de corte (onde Dictionary<,>começa a ser mais rápido) é muitas vezes cerca de 150 elementos. E já que você geralmente têm muito menos tabelas do que 150, eu ficaria feliz com uma lista linear para o desempenho.

(o que não significa de "não usar Dictionary<T>, mas apenas significa que o desempenho pode não ser a principal razão para este caso de uso particular; a aplicação da chave única eo foo [" bar "] modelo possa ser)

Parte disso é devido à complexidade de obter o hash - o GetHashCode()para string, em particular, é relativamente caro (embora int.GetHashCode()é ;-p extremamente rápido).

Na realidade, na maioria pequenos conjuntos de dados que você nunca vai notar a diferença entre os dois. Se você tem grandes volumes de dados, então, obviamente, você precisa planejar para isso e código de acordo.

Outras diferenças entre um Dictionary<,>e algo como um List<>é coisas como singularidade: a Dictionary<,>não vai deixar você ter duplicado chaves (embora um Lookup<,>em .NET 3.5 vai).

Respondeu 10/12/2008 em 10:20
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more