【发布时间】:2019-05-14 09:40:04
【问题描述】:
如何在小于 10 毫秒的时间内绘制并显示 100 万个圆(半径 5,填充相同颜色)?我已经尝试了在社区中可以找到的所有方法,但是通过在 QWidget::paintEvent() 中使用 QPainter::drawEllipse(),我可以达到的最佳性能大约是 2 秒。
【问题讨论】:
标签: performance qt qpainter
如何在小于 10 毫秒的时间内绘制并显示 100 万个圆(半径 5,填充相同颜色)?我已经尝试了在社区中可以找到的所有方法,但是通过在 QWidget::paintEvent() 中使用 QPainter::drawEllipse(),我可以达到的最佳性能大约是 2 秒。
【问题讨论】:
标签: performance qt qpainter
你不能。
要了解原因,让我们做一些数学运算。你有 10 毫秒,你想画 100 万个圆圈。这是每圈 10 ns 或 100 MHz 的绘图频率。 在当前的处理器(~1 GHz)上,这意味着您必须在不到 10 个时钟周期(~10 条指令)内画一个圆。这是最好的情况:某些指令需要超过 1 个时钟周期才能处理,如果缓存未命中并且 CPU 必须从 RAM 中获取内存,您可能会丢失周期,操作系统可以暂停您的程序以让另一个进程(或线程运行),...
因此,您无法使用 Qt 和 QPainter 实现这种性能。如果您使用硬件加速(OpenGL、DirectX 或 QtQuick),这可能是可行的。如果您不必以编程方式重绘所有内容,您可以在发生变化时更新“场景”。
【讨论】: