Utilice tecnología de doble almacenamiento en búfer para resolver la congelación del control de formulario winform (dataGridView tarda en cargar datos)

1. Antecedentes

Al trabajar en un proyecto C/S, el control de carga de la página del formulario terminado era lento. Después de ampliar o reducir el formulario, la carga del formulario se atascaba y la representación de datos era lenta.

En segundo lugar, puede utilizar la tecnología de doble almacenamiento en búfer para resolver este problema. Entonces, ¿qué es el doble buffer?

Introducción de Baidu: Cuando miramos televisión, la pantalla que vemos se llama capa OSD, es decir, solo podemos ver la imagen cuando se muestra en la capa OSD. Ahora, necesito crear una capa OSD virtual e invisible en la que se puedan dibujar dibujos (como puntos y líneas de dibujo), a la que llamo fuera de la pantalla (búfer posterior). Este fuera de pantalla existe en la memoria. Hacemos dibujos en él. Las cosas en este fuera de pantalla se pueden mostrar en la capa OSD. Necesitamos una función para crear este fuera de pantalla y devolver el identificador (puntero de número entero), el ancho, el alto y el puntero al nuevo fuera de pantalla de este fuera de pantalla . Puntero al búfer de datos . Este búfer es un búfer de datos fuera de pantalla creado fuera de la función. El tamaño es la altura del fuera de pantalla * el ancho * el tamaño de cada dato de píxel. El parpadeo es un problema común en la programación de gráficos. Las operaciones gráficas que requieren múltiples operaciones de dibujo complejas pueden hacer que la imagen renderizada parpadee o tenga otra apariencia inaceptable. El uso de doble buffer resuelve estos problemas. El doble búfer utiliza un búfer de memoria para resolver el problema de parpadeo causado por múltiples operaciones de dibujo. Cuando se habilita el almacenamiento en búfer doble, todas las operaciones de dibujo se representan primero en el búfer de memoria en lugar de en la superficie de dibujo en pantalla. Una vez completadas todas las operaciones de dibujo, el búfer de memoria se copia directamente a su superficie de dibujo asociada. Debido a que solo se realiza una operación gráfica en la pantalla , se elimina el parpadeo de la imagen causado por operaciones de dibujo complejas.

En resumen: en las computadoras, la animación se considera como una secuencia de imágenes cambiante, que consta de imágenes dinámicas cuadro por cuadro. Estas imágenes cambian con el tiempo. El último cuadro de imagen es una modificación del cuadro de imagen anterior.

En la animación de un solo búfer, los gráficos se dibujan directamente en el búfer de visualización. Si se muestra el siguiente fotograma de la imagen, la pantalla debe borrarse, por lo que la pantalla debe borrarse continuamente durante el proceso de producción. Esta es también la razón de la pantalla. parpadeando (carga lenta del formulario). La animación de doble búfer tiene dos búferes. Además del búfer de visualización, también hay un búfer de memoria. Durante el proceso de producción, los gráficos primero se dibujan en el búfer de memoria y luego las imágenes en el búfer de memoria se copian en la memoria caché. en un área, el búfer de visualización es solo una imagen del búfer de memoria.

Ejemplo:

Proyector y pizarra. Pero animación del búfer: cuando uso la pizarra, si está llena y necesito escribir una página, solo puedo borrar el contenido de la pizarra y luego escribir el contenido. Animación de doble búfer: cuando uso el proyector, es necesario cambiar el contenido, solo necesito modificar el contenido en el proyector para evitar operaciones de borrado.

3. Métodos específicos (visualización de código)

1. Solución al formulario winform de C# atascado

¿Qué formulario debe modificarse para provocar un retraso en la página? Agregue este método

 protected override CreateParams CreateParams
        {
            get
            {
                CreateParams cp = base.CreateParams;

                cp.ExStyle |= 0x02000000;

                return cp;
            }
           
        }

Este método puede resolver el problema de la carga lenta de todos los controles de la página.

En el código anterior, se utiliza la clase CreateParams, que resuelve específicamente los problemas de pantallas retrasadas y salpicadas. Consulta la información: CreateParams, una propiedad de formularios y controles, a través de la cual puedes controlar fácilmente algunas características de un formulario o control como bordes, maximizar, minimizar, cerrar, ocultar botones, modalidadizar formularios, modos emergentes, etc.

2. Luego, también puede utilizar el siguiente método para resolver el problema de la carga lenta y irregular de datos en dataGridView. La causa principal es también el uso de tecnología de doble buffer.

Debe escribir el siguiente código en el constructor correspondiente del formulario para controlar el retraso en la carga de datos en DataGridView.

this.SetStyle(ControlStyles.OptimizedDoubleBuffer //双缓冲
                | ControlStyles.ResizeRedraw 
               | ControlStyles.AllPaintingInWmPaint, //不擦除背景,减少闪烁
                true);
            this.UpdateStyles();

            //利用反射设置DataGridView的双缓冲
            Type dgvType = this.dgvwCustomerManagement.GetType();
            PropertyInfo pi = dgvType.GetProperty("DoubleBuffered",
               BindingFlags.Instance | BindingFlags.NonPublic);
            pi.SetValue(this.dgvwCustomerManagement, true, null);
          

4. Resumen

La tecnología de doble búfer es una tecnología de optimización para el dibujo de la interfaz gráfica que utiliza dos búfer para reducir el parpadeo de la imagen y mejorar la eficiencia del dibujo. El siguiente es un resumen de la tecnología de doble buffer:

1. Principio: la tecnología de doble búfer utiliza dos búfer, uno para dibujar imágenes y otro para mostrar imágenes. La imagen se dibuja en el búfer posterior y, una vez completada, la imagen completa se dibuja en el búfer frontal a la vez, evitando así el parpadeo de la imagen.

2. Ventajas: el uso de la tecnología de doble búfer puede mejorar la eficiencia del dibujo y la experiencia del usuario de la interfaz gráfica. Debido a que la operación de dibujo ocurre en segundo plano, el usuario puede ver una imagen completa, en lugar del proceso de dibujo elemento por elemento. Esto reduce el parpadeo de la imagen y mejora la percepción del usuario de la interfaz.

3. Método de implementación: se pueden utilizar varios lenguajes de programación y bibliotecas de gráficos para implementar la tecnología de doble búfer. Un enfoque común es utilizar un objeto de dibujo con doble búfer, dirigir la operación de dibujo al búfer posterior y luego dibujar todo el búfer posterior al búfer frontal.

4. Escenarios de aplicación: la tecnología de doble búfer es adecuada para escenarios que requieren un dibujo frecuente de interfaces gráficas, como editores gráficos, interfaces de juegos, etc. En estos escenarios, el uso de doble almacenamiento en búfer puede mejorar la eficiencia del dibujo y la experiencia del usuario, y reducir el parpadeo de la imagen.

5. Nota: cuando utilice la tecnología de doble búfer, debe prestar atención al consumo de memoria y a la sobrecarga de rendimiento. Dado que se utilizan dos buffers, la huella de memoria puede aumentar. Al mismo tiempo, dado que cada dibujo requiere dibujar todo el búfer posterior en el búfer frontal, el tiempo de dibujo y la sobrecarga de la CPU pueden aumentar.

En resumen, la tecnología de doble búfer es una tecnología de optimización para el dibujo de la interfaz gráfica que utiliza dos búfer para reducir el parpadeo de la imagen y mejorar la eficiencia del dibujo. El uso de tecnología de doble buffer puede mejorar la experiencia del usuario, especialmente en escenarios que requieren un dibujo frecuente de interfaces gráficas. Sin embargo, hay que tener en cuenta el consumo de memoria y los gastos generales de rendimiento al utilizar la tecnología de doble almacenamiento en búfer.

Supongo que te gusta

Origin blog.csdn.net/weixin_45309155/article/details/129503221
Recomendado
Clasificación