【问题标题】:Qt draw 1 million circle within 10 msQt 在 10 毫秒内画出 100 万个圆圈
【发布时间】:2019-05-14 09:40:04
【问题描述】:

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

【问题讨论】:

    标签: performance qt qpainter


    【解决方案1】:

    你不能。

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

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

    【讨论】:

    • 我会尝试使用 OpenGL。感谢您通过简单的数学运算为我节省了一些时间。
    猜你喜欢
    • 2012-11-12
    • 1970-01-01
    • 2012-12-24
    • 2021-10-04
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多