Esto es realmente simple..Net TableLayoutPanel - Borrar controles es muy lento
Tengo un TableLayoutPanel que está lleno de controles (solo Etiquetas, Botones y algunos Paneles con botones) basados en una consulta de base de datos. Cuando los datos deben actualizarse, utilizo TableLayoutPanel.Controls.Clear(). Desafortunadamente, esta es una operación muy lenta. Esperaría que fuera más rápido que el código que llena la tabla, pero es al menos 3 o 4 veces más lento.
Demuestré definitivamente que la lentitud se produce al ejecutar Controls.Clear() al ejecutar esto como lo único que se hace al TableLayoutPanel después de que se muestre un cuadro de mensaje (luego el procedimiento retorna). Los controles desaparecen visiblemente de abajo hacia arriba. Cuando el conjunto de registros se utiliza para volver a llenar el TableLayoutPanel, la velocidad de los controles que aparecen de arriba a abajo es casi más rápida de lo que puedo ver.
Ya estoy haciendo TableLayoutPanel.SuspendLayout() y ResumeLayout().
El uso de this.DoubleBuffered = true
en el formulario no parece hacer nada.
Podría deshacerme de todo el control y volver a crearlo a través del código, pero esto es un gran problema y hace que tener una bonita GUI de diseñador de formularios no tenga sentido. Tendría que profundizar en cada propiedad que he establecido en el control y crear una línea de código para ello (aunque creo que podría sacar esto del código de diseñador en sí, todavía se siente mal).
¿Alguna idea sobre cómo hacer el trabajo más rápido? Incluso estoy abierto a usar otros métodos además de TableLayoutPanel ... Solo necesito libertad para poner varios botones por celda o excluir eso para poder abarcar columnas en el encabezado de la tabla.
¿Puede C# congelar al menos la forma completa mientras se vuelve a dibujar y luego pintar todo a la vez?
Mencionas TableLayoutPanel y FlowLayoutPanel. –
¿Ha ejecutado un generador de perfiles para probar que es exactamente esa línea de código? ¿Es posible que cause efectos secundarios con esta línea de código? ¿Se están convocando eventos para que los controles se hagan invisibles o similares? – WillfulWizard
@Willfulwizard Actualicé mi publicación con el motivo por el que creo que es el Controls.Clear() que lleva mucho tiempo. – ErikE