2010-11-11 5 views
5

En pocas palabras, no podemos obtener un rendimiento de desplazamiento razonable de cualquier tipo de control de cuadrícula/elementos WPF cuando se carga con grandes cantidades de datos puros.Rejilla WPF lenta y intermitente Desplazamiento cuando se carga con grandes cantidades de datos (40 columnas, 2000 filas)

Hemos creado un prototipo independiente estática por medio de la red DevExpress WPF y subido aquí:

http://jump.fm/QOTDL

También hemos probado con la red Infragistics y Xceed, y el problema es el mismo.

Parece que WPF simplemente no puede hacer frente a las grillas de datos razonablemente grandes que muestran una gran cantidad de datos en cuanto a proporcionar una experiencia de usuario sin problemas. Incluso sin ningún tipo de enlace de datos, simplemente proporcionar datos estáticos (~ 40 columnas de ancho, 2000 filas), lleva el desplazamiento a un rastreo. En los niveles más bajos, el generador de perfiles parece indicar una cantidad excesiva de "Medida", además de una gran cantidad de recolección de basura, que podría ser la causa del tartamudeo irregular.

El código del prototipo se puede reemplazar fácilmente para que funcione con otras redes. Si alguien puede producir una experiencia de desplazamiento suave en el escenario dado especialmente en los casos en que los datos están agrupados en múltiples niveles y están densamente empaquetados, háganos saber que estaremos muy interesados ​​en saber de usted.

detalles adicionales:

estamos creando nuestros 2000 objetos (con ~ 40 propiedades de cada uno), y su asignación a la propiedad de origen de datos de la red.

Cada uno de nuestros objetos se representa como una clase similar a continuación:

public class RowViewModel 
{ 
    public double AskAsw { get; set; } 
    public string AskBmkName { get; set; } 
    public double AskBmkPrice { get; set; } 
    public double AskBmkSprd { get; set; } 
    ... and so on 
} 

Estos se crean y se añaden a una colección/lista de este modo:

 for (int i = 1; i < 2000; i++) 
     { 
      _rowViewModels.Add(new RowViewModel(i)); 
     } 

Y entonces obligado a la cuadrícula de datos. Muy sencillo:

 gridControl.DataSource = _rowViewModels; 

Esto da como resultado una cuadrícula de datos que muestra esta información. Hicimos la fuente más pequeña (10px, a petición del usuario), y autosize y agrupamos las columnas. El resultado termina buscando similar a esto:

http://i54.tinypic.com/21jt11t.png

y el desplazamiento es muy stuttery/lento. Háganos saber si tiene alguna idea.

+0

¿Cómo estás llenando la red uso de enlace de datos, o de forma manual ¿Qué clase.?? de la fuente de datos es?Proporcione más detalles, porque dudo que alguien vaya a descargar el archivo del proyecto ... –

+0

¿Existe alguna manera de especificar el panel de datos en estas cuadrículas? Si es así, debe buscar ubicarlo en un VirtualizingStackPanel. Está diseñado específicamente para manejar grandes conjuntos de datos al diferir la creación de elementos de la interfaz de usuario hasta que se necesite – benPearce

+0

@Thomas. Gracias por las sugerencias, agregué más detalles a la publicación al final. –

Respuesta

4

La cuadrícula de datos que viene con .NET 40 funciona bien para más de eso. Probado con 200 columnas y filas 50K (combinación de int32, double, strings y pantallas de clases personalizadas.

Existen indicadores para activar las virtualizaciones de filas y columnas. Sin embargo, recuerde que si está haciendo una agrupación, eso anula la virtualización de filas

I Get Around que usando mi propia perforación hacia abajo - dos mesas -. el control del usuario para obtener la agrupación de funcionalidad no grande, pero suficiente para mis necesidades

Cuestiones relacionadas