Qt 在 10 毫秒内绘制 100 万个圆圈

Qt draw 1 million circle within 10 ms

如何在不到 10 毫秒的时间内绘制并显示 100 万个圆(半径为 5,填充颜色相同)?我已经尝试了所有可以在社区中找到的方法,但通过在 QWidget::paintEvent() 中使用 QPainter::drawEllipse(),我可以达到的最佳性能约为 2 秒。

你不能。

要了解原因,让我们做一些数学运算。你有 10 毫秒,你想画 100 万个圆圈。这是每圈 10 ns 或 100 MHz 的绘图频率。 在当前的处理器(~1 GHz)上,这意味着你必须在不到 10 个时钟周期(~10 条指令)内画一个圆。这是最好的情况:一些指令需要超过 1 个时钟周期来处理,如果缓存未命中并且 CPU 必须从 RAM 中获取内存,操作系统可能会暂停您的程序以让另一个进程(或线程运行),...

因此,您无法使用 Qt 和 QPainter 实现这种性能。如果您使用硬件加速(OpenGL、DirectX 或 QtQuick),这可能是可行的。如果您不必以编程方式重绘所有内容,您可以在发生变化时更新 "scene"。