2010-04-20 8 views
4

Il s'agit davantage d'une réponse que j'aimerais partager avec le problème que je cherchais depuis un certain temps dans l'application RCP à l'aide de grandes tables SWT.Supprimer des éléments des tables SWT

Le problème est la performance de la méthode SWT Table.remove (int start, int end). Il donne de très mauvaises performances - environ 50 ms pour 100 éléments sur mon Windows XP. Mais le véritable bouchon du spectacle était sur Vista et Windows 7, où la suppression de 100 éléments prendrait jusqu'à 5 secondes! Regarder dans le code source de la table montre qu'il y a énormément d'événements de fenêtrage autour de cet appel .. Cela met le système de fenêtrage à genoux.

La solution était de cacher la fichue chose pendant cet appel:

table.setVisible(false); 
table.remove(from, to); 
table.setVisible(true); 

qui fait des merveilles - supprimer 500 articles sur les deux XP & Windows7 prend ~ 15 ms, ce qui est juste une tête pour l'impression des horodateurs I utilisé.

nice :)

Répondre

5

Au lieu de table.setVisible(), vous devriez plutôt utiliser table.setRedraw(). Cette méthode sur Control a précisément pour but de supprimer les opérations de dessin pendant les mises à jour coûteuses.

+0

Oui, ça marche bien aussi, merci! – Dima