¿Por qué el DoubleBuffered predeterminado de la propiedad a false en un DataGridView y por qué es protegido?

Tuvimos un problema de rendimiento con DataGridViews donde el redibujado fue horridly lento y encuentra la solución Aquí para crear un tipo derivado y habilitar el doble búfer en el control.
(Tipo derivado es necesario ya que el DoubleBuffered propiedad está protegida)

Parece que no hay ningún inconveniente para tener la DoubleBuffered de la propiedad se establece en true.

OriginalEl autor Karg | 2008-10-31

4 Kommentare

  1. 17

    Está protegido porque DGV hereda la propiedad de Control. Y De Control.DoubleBuffered está protegido. Lo cual tiene sentido porque cada uno de los derivados de control debe decidir por sí mismo a encenderlo. Y no tiene sentido para el usuario de control de la arbitrariedad de activarlo o desactivarlo. El DGV diseñadores decidieron por fuera.

    Una de las razones que podrían haber decidido que es que el doble búfer en realidad hace que la pintura sea más lento. Un paso más para representar el búfer de mapa de bits de costos de tiempo. Sólo se ve más rápido para el ojo humano, observa el mapa de bits que aparecen de repente. Usted no puede ver el tiempo que se tarda en dibujar en el mapa de bits. A menos que otros controles necesitan ser pintadas y que llegue el turno después de la DGV, entonces es muy visible.

    Lo que se ve es la forma de llegar dibuja primero, con agujeros en los que los controles de ir. Los orificios tienen un fondo blanco. Negro cuando se utiliza el TransparencyKey o la Opacidad de la propiedad. Cada control, a continuación, se presenta el evento Paint y los agujeros se rellenan uno-por-uno. Ese efecto es percibido como el parpadeo demasiado por el usuario, aunque es un tipo diferente de parpadeo de la que DoubleBuffered resuelve. Es especialmente notable cuando el fondo es negro.

    Lo que se necesita para resolver este problema es que el formulario en su totalidad, con todos sus controles, es de doble buffer. Que no está disponible en Windows Forms. Sin embargo, Windows XP y versiones posteriores en realidad el apoyo de este. Compruebe este hilo para ver cómo se hace eso. Ten en cuenta que puede tener efectos secundarios, como se documenta en ese hilo.

    Interesante, aunque en el caso de que el datagridview, sin doublebuffering, tarda de 2 a 3 segundos para volver a dibujar el control, pero con el doble búfer, parece instante
    por cierto, hasta el voto para la respuesta a la parte protegida de la pregunta
    En realidad el doble buffering lo hace mucho más rápido… bastante más rápido que el ojo desnudo puede decir fácilmente la diferencia. Agradezco esta respuesta en la que puede ser la más «correcta» de hacer, pero no es tan práctico como sólo el uso de la reflexión para establecer cambiar la configuración en el DataGridView
    Mi problema es que cuando cambio mi forma de utilizar esta clase derivada en lugar de la normal que el editor de recursos no mostrará el formulario de más.

    OriginalEl autor Hans Passant

  2. 15

    Creo que la mejor solución:

    typeof(DataGridView).InvokeMember(
       "DoubleBuffered", 
       BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.SetProperty,
       null, 
       myDataGridViewObject, 
       new object[] { true });

    encontrado aquí

    La pregunta que se pregunta por qué se establece en false, no se como eliminarlo.
    Aunque puede ser útil para alguien que está buscando cómo habilitar el doble búfer.

    OriginalEl autor daftu

  3. 3

    Doble búfer, por definición, utiliza dos búferes y el doble de memoria para representar el punto de vista del control. Así, hay algún inconveniente hay, sin embargo, con la cantidad de memoria en un PC ahora, no mucha gente probablemente se daría cuenta de que el sacrificio.

    Ni idea de por qué su protegido. Tal vez la función no estaba disponible en una versión temprana del control, y cuando fue introducido los diseñadores no desea cambiar la interfaz pública de la de control. O tal vez se consideró como una característica avanzada y quería limitar el número de métodos a alguien nuevo para el control tendría que asimilar a ser capaz de hacer algo útil.

    ¿Por qué el downvote? Es algo que yo he escrito incorrecta?

    OriginalEl autor Scott Langham

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea