我有一个数据可视化应用程序(平行坐标)。这涉及在屏幕上绘制大量线条。该应用程序适用于庞大的数据集。测试数据集涉及约 250 万行(精确到 2527700 行)。屏幕会杂乱无章,但会显示一些图案。该应用程序具有沿 X 和 Y 缩放的功能。在典型的缩放级别下,它绘制大约 300K 线。该应用程序是用 Qt 编写的,渲染所花费的时间是可观的。典型数字是(以毫秒为单位的时间)
耗时:496 画了 1003226 行
耗时:603 画了 1210032 行
耗时:112 画了 344582 行
耗时:182 画了 387960 行
耗时:178 画了 361424 行
耗时:222 画了 676470 行
耗时:171 画了 475652 行
耗时:251 画了 318709 行
所用时间:5 绘制 14160 行
耗时:16 绘制 27233 行
以下代码段用于对绘制的线段进行计时和计数。渲染发生在屏幕外图像(格式为 Format_ARGB32_Premultiplied 的 QImage)。QImage 的大小最大为 1366 x 768。分段类型为 QVector。
QTime m_timer;
m_timer.start();
painter.drawLines(segments);
qDebug() << "Time taken: " << m_timer.elapsed();
painter.end();
qDebug() << "Drew " << segments.size();
此 QImage 被缓存以保存将来的绘图。我从未使用过 DirectX。直接 2D 渲染是否会比我已经拥有的提供更多的性能优势。有什么办法可以改善这些数字吗?
如果直接 2D 渲染可以提高这些数字,使用什么技术堆栈?使用 C#/SharpDX 会更好吗?我问这个是因为 Qt 只能通过翻译来执行 DirectX(不确定成本是多少),并且由于应用程序主要是 windows C# 可能会简化开发人员。过程。