Pergunta

Tenho uma aplicação que lê uma tabela de um banco de dados.

Eu emito uma consulta SQL para obter um conjunto de resultados, com base em um valor de string exclusivo obtido dos resultados, uso uma instrução case/switch para gerar determinados objetos (eles herdam TreeNode BTW).Esses objetos criados são desviados para um objeto Dicionário para ser usado posteriormente.

Ao gerar esses objetos, uso alguns dos valores do conjunto de resultados para preencher os valores no objeto por meio dos setters.

Eu consulto o Dicionário para retornar um tipo de objeto específico e o uso para preencher uma visualização em árvore.No entanto, não é possível preencher 2 objetos do mesmo tipo em uma visualização em árvore a partir do objeto Dicionário (você recebe um erro de tempo de execução - que me escapa no momento, algo relacionado à referência ao mesmo objeto).Então o que preciso fazer é usar um memberwiseClone e implementar IClonable para contornar isso.

Estou fazendo isso certo?Existe uma maneira melhor - porque acho que isso está fazendo com que meu programa fique muito lento neste momento.No mínimo, acho que é um pouco desajeitado - qualquer conselho de pessoas que sabem mais do que eu - muito apreciado.

Foi útil?

Solução

Para adicionar a @Brad, preencha a árvore apenas conforme necessário.Isso significa conectar-se ao evento de expansão dos nós da árvore.Isso é semelhante ao modo como o Windows Explorer funciona ao lidar com compartilhamentos de rede.

Deveria haver 1 TreeNode objeto por nó de árvore real na árvore - não tente reutilizar as coisas.Você pode associá-los aos seus dados usando a propriedade Tag (este é o método recomendado) ou pode subclassificar os TreeNode em si (este é o método Java, mas menos usado em .NET).

(O uso de métodos de clonagem geralmente é uma dica de que você está (a) fazendo algo errado ou (b) precisa fatorar seu modelo de domínio para separar objetos mutáveis ​​de imutáveis.)

Outras dicas

Existe um motivo para você estar usando o dicionário externo?Eu preencheria a árvore diretamente à medida que os dados fossem consultados.

Se você precisar do dicionário, poderá definir a propriedade .Tag do nó da árvore para apontar para os dados em seu dicionário.

você já pensou em usar uma visualização em árvore virtual que carrega apenas os nós que o usuário realmente deseja ver - tive bom sucesso com o componente de www.infralution.com

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