Оптимизация ваших приложений PyQt - PullRequest
6 голосов
/ 20 июля 2011

Для тех из вас, кто написал довольно сложные приложения PyQt, какие советы и хитрости вы бы предложили для ускорения ваших приложений? У меня есть несколько примеров, когда моя программа начинает замедляться по мере увеличения:

  • У меня написана «панель инструментов», которая уничтожается и воссоздается, когда пользователь нажимает на элемент в TreeWidget. Что может быть лучше, если у вас есть модульный интерфейс, в котором нажатие на элемент в TreeWidget изменяет панель управления, но не требует уничтожения виджета и его воссоздания.

  • Каждая панель также загружает изображение из сетевого расположения. Это создает некоторое замедление при перемещении по приложению, но после загрузки в память «возврат к тому же тире» происходит быстрее. Есть ли хороший способ или способ запустить поток при загрузке программы, который, возможно, предварительно загружает изображения в память? Если да, то как вы это реализуете?

  • Когда у вас есть большое количество элементов панели инструментов и данных, которые загружаются в них, вы, ребята, обычно распределяете поток данных и загружаете его обратно, в котором каждый поток завершается? Это жизнеспособно, когда кто-то быстро просматривает? Будет ли работать команда kill-switch для потоков, чтобы, когда пользователь меняет панели мониторинга, потоки умирают, работает? Или постоянное создание и уничтожение нитей вызовет какой-то, ну, в общем, крах.

Извините за огромное количество вопросов, но они казались достаточно похожими, чтобы оправдать их объединение.

Ответы [ 2 ]

8 голосов
/ 25 июля 2011

Я не уверен, что это то же самое, что вы делаете, но это звучит похоже на то, что у меня есть в некоторых приложениях, где есть какой-то список пользовательских виджетов. И это значительно замедляет, когда вы создаете и уничтожаете тонны виджетов.

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

Другая ситуация, когда вы отображаете список с пользовательскими виджетами, и вы получаете ТОННУ результатов. Я заметил, что это всегда замедляется, когда у вас есть 1000 пользовательских виджетов в списке. Прикол, который придумал мой коллега, заключался в том, чтобы иметь поддельный вид списка, в котором он использует статическое количество слотов на дисплее. Скажем, это показывает 10 слотов в представлении. Полоса прокрутки на самом деле не прокручивается вниз по БОЛЕЕ виджету ... она выполняет прокрутку ДАННЫХ через 10 видимых виджетов. Вы можете безумно увеличить производительность, делая это. Но только если это приемлемый стиль отображения для вашего приложения.

1 голос
/ 21 июля 2011

Используете ли вы QNetworkAccessManager для загрузки изображений?Имеет поддержку кеша.Также он загружает все в фоновом режиме с завершающими обратными вызовами.

Я не очень понимаю, что делает ваша панель инструментов.Вы думаете об использовании QWebkit?Может быть, ваш контент панели инструментов легко реализовать в HTML?

PS.Я не люблю темы в Python и не думаю, что они хорошая идея.Отложенные задания, делегированные ядру Qt, лучше.

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