Estoy creando una aplicación de tablero que muestra cientos de "elementos" en un FlowLayoutPanel
.Cientos de UserControls personalizados crean miles de objetos de usuario
Cada "artículo" es un UserControl
que se compone de 12 cuadros de texto o etiquetas.
Mi aplicación consulta una base de datos y luego crea una instancia de "elemento" para cada registro, completando las etiquetas y cuadros de texto con datos antes de agregarlo al FlowLayoutPanel
.
Después de agregar unos 560 elementos al panel, noté que el conteo USER Objects
en mi Administrador de tareas había subido a aproximadamente 7300, que era mucho más grande que cualquier otra aplicación en mi máquina.
que pensé que 560 * 13 (12 etiquetas más el propio control de usuario) es 7280. Así que de repente se dio de distancia, donde todos los objetos venían de ...
Sabiendo que hay un límite de 10.000 objetos de usuario antes de Windows arroja la toalla, estoy tratando de encontrar mejores formas de dibujar estos "artículos" en el FlowLayoutPanel
.
Mis ideas hasta el momento son los siguientes:
usuario dibujar el "elemento", usando
graphics.DrawText
yDrawImage
en lugar de muchas de las etiquetas. Estoy esperando que esto significará 1 punto = 1USER Object
, no 13.tienen 1 instancia del "elemento", a continuación, para cada registro, rellenar la instancia y utilizar el método
Control.DrawToBitmap()
para agarrar una imagen y luego el uso que en elFlowLayoutPanel
(o similar)
Así que ... ¿alguien tiene alguna sugerencia ???
P.S. Es una interfaz con zoom, por lo que ya he descartado la "búsqueda" ya que existe un requisito para ver todos los elementos a la vez
En lugar de crear cientos de mapas de bits o cuadros de imagen, creo que el enfoque sería dibujar cada control directamente a la imagen de un solo 'PictureBox', o tener un solo mapa de bits" sprite "y dibujar todos los controles a ese. Aunque si realmente son etiquetas * just *, supongo que es más fácil utilizar un 'TextRenderer' y eludir por completo los controles: es difícil decir exactamente qué se debe dibujar aquí. – Aaronaught
Lo alejaría de 'TextRenderer', ya que es bastante lento (en relación con' Graphics.DrawString'), pero estoy de acuerdo en que su mejor enfoque es simplemente renderizar cada fila de la base de datos directamente en un solo control (y preferiblemente solo renderizar las filas visibles). – MusiGenesis