Crear objetos impulsados ​​por la base de datos para completar una vista de árbol: muy lento

StackOverflow https://stackoverflow.com/questions/56224

Pregunta

Tengo una aplicación que lee una tabla de una base de datos.

Emito una consulta SQL para obtener un conjunto de resultados, basado en un valor de cadena único que obtengo de los resultados, uso una declaración case/switch para generar ciertos objetos (heredan TreeNode por cierto).Estos objetos creados se desvían a un objeto Diccionario para usarlos más adelante.

Mientras genero estos objetos, uso algunos de los valores del conjunto de resultados para completar los valores en el objeto a través de los configuradores.

Consulto el Diccionario para devolver un tipo de objeto particular y lo uso para completar una vista de árbol.Sin embargo, no es posible completar 2 objetos del mismo tipo en una vista de árbol desde el objeto Diccionario (obtiene un error de tiempo de ejecución, que se me escapa en este momento, algo relacionado con hacer referencia al mismo objeto).Entonces, lo que tengo que hacer es usar un MemberwiseClone e implementar IClonable para solucionar este problema.

¿Lo estoy haciendo bien?¿Existe una manera mejor? Porque creo que esto está provocando que mi programa sea muy lento en este momento.Como mínimo, creo que es un poco complicado; cualquier consejo de personas que sepan más que yo será muy apreciado.

¿Fue útil?

Solución

Para añadir a @Puntilla, solo complete el árbol según sea necesario.Eso significa conectarse al evento de expansión de los nodos del árbol.Esto es similar a cómo funciona el Explorador de Windows cuando se trata de recursos compartidos de red.

debería haber 1 TreeNode objeto por nodo de árbol real en el árbol; no intente reutilizar las cosas.Puede asociarlos con sus datos usando la propiedad Etiqueta (este es el método recomendado), o puede subclasificar el TreeNode en sí (este es el método Java, pero se usa menos en .NET).

(El uso de métodos de clonación suele ser un indicio de que (a) está haciendo algo mal o (b) necesita factorizar su modelo de dominio para separar los objetos mutables de los inmutables).

Otros consejos

¿Hay alguna razón por la que estás utilizando el diccionario externo?Completaría el árbol directamente a medida que se consultan los datos.

Si necesita el diccionario, puede configurar la propiedad .Tag del nodo del árbol para que apunte a los datos de su diccionario.

¿Ha considerado utilizar una vista de árbol virtual que solo carga los nodos que el usuario realmente desea ver? He tenido mucho éxito con el componente de www.infralution.com

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top