Qt нарисовать 1 миллион кругов за 10 мс - PullRequest
1 голос
/ 14 мая 2019

Как я могу нарисовать и показать 1 миллион кругов (радиус 5, заполненный тем же цветом) размером менее 10 мс? Я попробовал все, что я могу найти в сообществе, но лучшая производительность, которую я могу достичь, составляет около 2 секунд при использовании QPainter :: drawEllipse () внутри QWidget :: paintEvent ().

1 Ответ

4 голосов
/ 14 мая 2019

Вы не можете.

Чтобы понять почему, давайте немного посчитаем.У вас есть 10 мс, и вы хотите нарисовать 1 миллион кругов.Это 10 нс на круг или частоту прорисовки 100 МГц.На текущем процессоре (~ 1 ГГц) это означает, что вы должны нарисовать круг менее чем за 10 тактов (~ 10 инструкций).И это лучший сценарий: для выполнения некоторых инструкций требуется более 1 тактового цикла, вы можете потерять циклы, если у вас пропущен кеш, а ЦП вынужден извлекать память из ОЗУ, операционная система может приостановить вашу программу, чтобы позволить другому процессу (или запуск потока), ...

Так что вы не сможете достичь такой производительности с помощью Qt и QPainter.Это может быть осуществимо, если вы используете аппаратное ускорение (OpenGL, DirectX или, возможно, QtQuick).Если вам не нужно перерисовывать все программно, вы можете просто обновить «сцену», когда что-то изменится.

...