Удалить элементы из таблиц SWT - PullRequest
4 голосов
/ 21 апреля 2010

Это - больше ответа, которым я хотел бы поделиться для проблемы, которую я преследовал некоторое время в приложении RCP, используя большие таблицы SWT.

Проблема заключается в производительности метода SWT Table.remove (int start, int end). Это дает действительно плохую производительность - около 50 мсек на 100 элементов в моей Windows XP. Но настоящая остановка шоу была в Vista и Windows 7, где удаление 100 элементов заняло бы до 5 секунд! Изучение исходного кода таблицы показывает, что в этом вызове разворачивается огромное количество событий управления окнами. Это ставит систему управления окнами на колени.

Решением было скрыть эту чертову вещь во время этого звонка:

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

Это чудесно - удаление 500 элементов в XP и Windows7 занимает ~ 15 мсек, что является непроизводительными затратами на распечатку меток времени, которые я использовал.

приятно:)

1 Ответ

5 голосов
/ 05 мая 2010

Вместо table.setVisible () вы должны использовать table.setRedraw (). Этот метод в Control точно предназначен для подавления операций рисования во время дорогостоящих обновлений.

...