Как бы вы отобразили огромное количество строк в таблице SWT? Огромный это что-то выше 20К строк, 20 столбцов. Не спрашивайте меня, почему мне нужно показывать столько данных, это не главное. Дело в том, как заставить его работать как можно быстрее, чтобы конечному пользователю не было скучно ждать. Каждая строка отображает экземпляр какого-либо объекта, столбцы - его свойства (некоторые). Я думал использовать шаблон поставщика содержимого / меток JFace, но боялся, что это будет даже медленнее, чем попадание в таблицу непосредственно с данными. Вот как это происходит:
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());
.....
}
});
Создание 20 КБ записей на моем компьютере занимает около 20 секунд.
Самая большая проблема с производительностью, которую я видел в Windows, вызвана невероятным количеством собственных оконных сообщений, отправляемых SWT, когда новый элемент таблицы создается и заполняется текстом. Я нашел отличный обходной путь для этого - спрячьте таблицу перед заполнением, а затем покажите ее, когда закончите. Просто вызывая table.setVisible (false) перед циклом и table.setVisible (true) после цикла, творит чудеса - скорость возрастает в шесть-семь раз!
Я бы хотел ускорить это еще больше.
Что ты предлагаешь ? Кроме того, мне интересно, как этот трюк, скрывающий виджет, будет работать в не-оконных реализациях SWT (иначе Linux)?