Редакторы со многими виджетами имеют ужасную производительность - PullRequest
0 голосов
/ 28 марта 2019

Мы перешли на целевую платформу e4. Один редактор стал ужасно медленным при рендеринге (около 20 секунд до верстки). Когда модальное диалоговое окно открывается из меню редактора, приложение мерцает, как будто у него эпилептическая припадка.

Когда мы выключаем css, ...

DefaultScope.INSTANCE.getNode("org.eclipse.e4.ui.workbench.renderers.swt")
    .put("themeEnabled", "false");

в плагине рендеринг очень быстрый (<10 мс), как это было при предыдущей целевой платформе. </p> это элемент управления, который я встроил в редактор (по соображениям оценки):

package xyz;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;

public class BigControl extends Composite {

    public BigControl(Composite parent, int style) {
        super(parent, style);
        setLayout(new GridLayout(23, false));
        for (int i=0; i<100; i++) {
            for (int j=0; j<23; j++) {
                new Label(this, SWT.NONE).setText("|" +  Integer.toString(i) + " " + Integer.toString(j) + "|");;
            }
        }
    }
}

кто-нибудь сталкивался с этой проблемой? Да, мы знаем, что таблица была бы лучше для такого количества данных, но рефакторинг, который сейчас будет стоить слишком дорого.

Вторая проблема заключается в том, что когда мы отключаем функциональность темы, eclipse / swt вызывает исключения при переключении перспектив, видов и т. Д.

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

ОК, мы заменили целевую платформу более новой (2019-3). Я не знал об использовании более старой платформы.

Мерцание прекратилось , оно все еще не быстрое (изменение размера окна занимает около 2 секунд), но на данный момент это приемлемо.

Спасибо за помощь,

Бест, Мартин

0 голосов
/ 29 марта 2019

... чтобы прояснить ситуацию, я создал совершенно новое приложение с помощью мастера eclipse (... имея представление).

Я заменил пример кода представлений на это - , как я уже говорил, когда мы отключаем css / theming (см. Код выше), все в порядке - в противном случае он не перестает дрожать, это даже трудно вернуть указатель мыши к затмению, чтобы остановить приложение:

package xyz;

import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.part.ViewPart;

public class View extends ViewPart {
    public static final String ID = "xyz.view";

    public class BigControl extends Composite {

        public BigControl(Composite parent, int style) {
            super(parent, style);
            setLayout(new GridLayout(23, false));
            for (int i=0; i<100; i++) {
                for (int j=0; j<23; j++) {
                    new Label(this, SWT.NONE).setText("|" + Integer.toString(i) +     " " + Integer.toString(j) + "|");;
            }
            }
        }
    }

    @Override
    public void createPartControl(Composite parent) {
        new BigControl(parent, SWT.NONE);
    }


    @Override
    public void setFocus() {
    }
}
...