Проблема с производительностью графического интерфейса SWT в Linux - PullRequest
1 голос
/ 13 ноября 2009

У нас есть приложение для мониторинга, созданное на SWT и работающее на Linux. у нас есть несколько кнопок и динамическая часть, которая изменяется при нажатии на эти кнопки. Проблема в том, что если кто-то щелкнет слишком быстро, процессор может достигнуть 100% и зависнуть навсегда. Мы наблюдали такие быстрые всплески скорости процессора только в Ubuntu Linux, где как windows он работает без зуда. Мы уверены, что наше приложение перерисовывает всякий раз, когда мы нажимаем (у нас есть динамическая часть) кнопку, и это дизайн. Проблема не только в динамической части. Одним из решений является игнорирование быстрых нажатий.

Нам интересно, можем ли мы игнорировать быстрые нажатия кнопок, чтобы процессор не работал до 100%. Если это не сработает, нам, возможно, придется изменить динамическую часть, которую мы предпочитаем в качестве последнего варианта. предложения / комментарии с благодарностью.

Ответы [ 5 ]

0 голосов
/ 07 апреля 2011

У многих людей возникали проблемы с производительностью (то есть, очень высокая загрузка ЦП) с приложениями SWT на Gtk + при слишком частом обновлении виджетов. Фактическая причина, кажется, Gtk +.

Хотя немного устарело, здесь является полным объяснением таких проблем с производительностью.

Вы можете попробовать заменить компоненты SWT на встроенные компоненты Swing и проверить, можно ли устранить проблемы.

0 голосов
/ 02 февраля 2010

Попробуйте это или используйте pstack или lsstack . Когда приложение работает долго (или зависает), это когда он умоляет вас просто посмотреть и посмотреть, что оно делает.

0 голосов
/ 13 января 2010

У меня такая же проблема в Ubuntu. Но в OpenSuse это выглядит намного лучше.

Что вы можете попробовать:

Установите анти-псевдоним и расширенный параметр GC, например:

gc.setAntialias(SWT.OFF);
gc.setTextAntialias(SWT.OFF);
gc.setAdvanced(false);

И проверьте, используете ли вы коммерческий графический драйвер (то есть от NVIDIA или ATI), а не драйвер с открытым исходным кодом.

0 голосов
/ 02 февраля 2010

Другое решение - увеличить память с помощью -Xms512m -Xmx512m

0 голосов
/ 23 ноября 2009

Похоже, приложение просто зашло в тупик. Вы используете темы?

Проверьте, действительно ли перекраска является основной причиной зависания приложения. Также проверьте, чтобы определить, какой поток он использует:

Thread.currentThread()

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

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