0

我正在使用 Qt 开发一个跨平台的分形浏览器。我在 Windows XP(使用 MSVC Express 2010 编译的程序)下在单核 CPU 上运行时遇到了性能问题,我还没有尝试过其他版本的 Windows。有两个内核,程序运行良好。它在具有一核或两核(使用 GCC 编译)的 Linux 下也能正常运行。

性能问题与通过计算线程中的信号调用小部件中的插槽有关。该小部件包含一个 QImage,我将一个指向其像素的指针传递给计算线程。该线程计算分形并将像素绘制到图像上。在每一行的末尾,线程向小部件发出一个信号,告诉它更新主线程中的显示。据我了解,这是一个排队连接。

使用 Windows 和单个 CPU,更新非常慢,比计算慢得多。它使程序无法使用。

相关代码类似于 Qt 文档中的 Mandelbrot 示例,除了我的信号没有参数,因为 Qimage 位于小部件而不是线程中,并且我没有将 QImage 转换为 QPixmap。

有没有人知道问题可能是什么以及如何解决它?它与调度,时间切片分配有关吗?MSVC 中是否有我需要设置的编译器标志?或者我需要如何修改我的程序?

非常感谢!

4

1 回答 1

0

你说更新比计算慢——慢多少?您是否进行了任何全面的分析以查看瓶颈到底发生在哪里?粗略的谷歌发现这个分析器可以帮助你。

请记住,对于较旧的 CPU,线程上下文切换非常昂贵。这可能是您的问题的一部分,尽管我不知道具体细节。

于 2011-08-28T20:04:49.947 回答