Каким образом многие графические компоненты влияют на производительность графического интерфейса Swing? - PullRequest
3 голосов
/ 22 июня 2009

Я создал приложение на Java Swing и понял, что у меня много компонентов в форме.

Это не значит, что мой интерфейс загроможден , но, тем не менее, общая сумма может быть довольно высокой (сотни), потому что пользователь может включить дополнительные части интерфейса, и на нем должны быть повторяющиеся панели в виде списка форма.

Кроме того, многие компоненты упакованы в JXLayer , что снова увеличивает количество визуальных компонентов.

До сих пор я не мог обнаружить никаких проблем, кроме отставания во время прокрутки и изменения размера.

  • Есть ли теоретические ограничения на количество компонентов? (Я сомневаюсь в этом, но я также должен кодировать в VB6, поэтому я был там ...)
  • Есть ли практические ограничения? На работе у нас есть несколько рабочих станций среднего уровня, которые на первый взгляд хорошо работают, но как Java / Swing реагирует на рабочие станции низкого уровня или на экстремальное количество компонентов?
  • Есть ли способ профилировать графический интерфейс моего приложения, кроме проверки субъективного впечатления пользователя? Есть ли объективные показатели, которые я могу искать (например, общее время, потраченное на javax.swing.SwingCoreClassWhichContainsBottleneckCode или что-то ...)

Ответы [ 3 ]

4 голосов
/ 24 июня 2009

Swing может обрабатывать значительное количество компонентов только с ограничениями памяти, особенно с использованием простых компонентов (текстовое поле, метка, переключатель и т. Д.). Есть некоторые приемы, например, уменьшение размера окна и упаковка всего в JScrollPane, но обычно вам понадобятся стандартные методы, такие как тяжелая обработка в фоновом режиме.

Одной из функций, над которой работает моя компания, является диалоговое окно с повторяющимся JPanel, содержащее несколько ярлыков и кнопку. Мы протестировали его на нашем старом Mac Mini (Intel Core Solo с 512 МБ оперативной памяти), и создание 500 панелей заняло несколько секунд, но после этого прокрутка списка панелей или добавление новых панелей не замедлились вовсе.

Для серьезных проблем производительности смотрите JTable , который довольно высоко оптимизирован для отображения больших объемов данных. Это немного сложно для создания пользовательских средств визуализации и редакторов, но не невозможно.

3 голосов
/ 22 июня 2009
  1. Теоретически, вы можете иметь столько компонентов, сколько захотите.

  2. Практическим ограничением является объем оперативной памяти. Кроме того, пользовательский интерфейс начнет работать медленно, когда у вас будет слишком много компонентов, поэтому производительность также является проблемой (как всегда). Java 6 немного поможет.

  3. Да. Вы можете создать пользовательский интерфейс, а затем вызвать перерисовку на уровне оболочки (чтобы все было нарисовано) и измерить это. Использование профилировщика должно дать вам представление о том, какой компонент особенно медленный.

3 голосов
/ 22 июня 2009

Только память и базовая ОС ограничивают количество компонентов.

Практический предел немного субъективен для пользователя. Попробуйте разделить пользовательский интерфейс на отдельные вкладки или JFrames, это ограничит затраты на рендеринг для экрана.

JVisualVM достаточно хорош для профилирования Java-приложений. Вам нужно будет удалить фильтры классов, чтобы увидеть профили классов sun * и javax *.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...