¿Qué le parecería mostrar una gran cantidad de filas en la tabla SWT? Enorme es algo más de 20K filas, 20 columnas. No me preguntes por qué necesito mostrar tantos datos, no es el punto. El punto es cómo hacer que funcione lo más rápido posible para que el usuario final no se aburra esperando. Cada fila muestra una instancia de algún objeto, las columnas son sus propiedades (algunas). Pensé usar el patrón del proveedor de contenido/etiqueta de JFace, pero temía que fuera incluso más lento que tocar directamente la tabla con los datos. Así es como va:Poblar una tabla enorme en la aplicación SWT/JFace RCP
Display.getDefault().asyncExec(new Runnable() {
public void run() {
List<MyObject> objects = model.getViewData();
for(MyObject object: objects){
TableItem item = new TableItem(table, SWT.NULL);
item.setImage(0, img1);
item.setBackground(color1);
item.setText(0, object.getProperty0());
item.setText(1, object.getProperty1());
item.setText(2, object.getProperty2());
.....
}
});
Dibujar 20k registros en mi computadora dura unos 20 sec. El mayor problema de rendimiento que he visto en Windows se debe a la increíble cantidad de mensajes de ventanas nativas enviados por SWT cuando se creó un nuevo elemento de tabla y se rellenó con texto. He encontrado una gran solución para esto: ocultar la tabla antes de poblar, y luego mostrarla cuando haya terminado. Simplemente llamando a table.setVisible (falso) antes del bucle y table.setVisible (true) después de que el bucle hace maravillas, ¡la velocidad aumenta seis o siete veces!
Me gustaría acelerarlo aún más. ¿Qué sugerirías? Además, me pregunto cómo funcionaría este truco para ocultar el widget en implementaciones de SWT (también conocidas como Linux) que no sean Windows.
Esta es exactamente la solución, ahora completar 100k filas requiere casi cero tiempo, una característica bastante sorprendente, ¡muchas gracias! – Dima
@ralfstx ¿Puede decirme cómo puedo filtrar una tabla como esta? –
@AdamArold Para esto, puede ver 'DeferredContentProvider' (consulte, por ejemplo, este [tutorial] (http://waynebeaton.wordpress.com/2008/01/16/deferredcontentprotentr-my-new-favourite-thing/)) . Pero debe tener en cuenta que puede haber algunos problemas con la actualización cuando se desplaza: https://bugs.eclipse.org/bugs/show_bug.cgi?id=146799 – hnn