SWT TreeViewer работает медленно при заполнении множеством элементов - PullRequest
2 голосов
/ 29 сентября 2011

Я новичок в мире Java, поэтому извините, если мой вопрос тривиален.

Я разрабатываю часть представления Eclipse и заполняю представление дерева SWT следующей структурой данных. Все данные в памяти:

Node1
   Child1
   Child2
Node2
   Child1
   ...
   Child2915

Я думаю, что это не очень большое дерево, но оно медленно рисуется (10 секунд). Я управляю деревьями в .NET с более чем 10.000 элементов, и он загружается гладко. Я не знаю, реализовал ли я код, но такая же проблема появилась в .NET, если я не звонил BeginUpdate() - EndUpdate().

Должен ли я назвать нечто подобное в Java / SWT? Любые другие советы о том, почему дерево так медленно?

Ответы [ 2 ]

5 голосов
/ 29 сентября 2011

Вы можете использовать флаг SWT.VIRTUAL при создании дерева, чтобы помочь с производительностью

Для получения дополнительной информации см. Эту статью на Виртуальные деревья и таблицы

Это также можно комбинировать с JFace TreeViewer. См. Эту статью на JFace TreeViewer для получения более подробной информации (хотя это и не упоминает виртуальный флаг)

3 голосов
/ 29 сентября 2011

Наконец, я использовал setRedraw(boolean value) после вызова обновления в моем TreeViewer.

public void refresh() {
    try {
        mTreeViewer.getControl().setRedraw(false);
        mTreeViewer.refresh(true);
        mTreeViewer.expandAll();
    }
    finally {
        mTreeViewer.getControl().setRedraw(true);
    }
}
...