我正在使用Qt开发一个跨平台的分形探险家。我在Windows XP(使用MSVC Express 2010编译的程序)上运行单核CPU时遇到了性能问题,我还没有尝试过其他版本的Windows。有两个核心,程序运行正常。它在Linux下运行正常,可以是一个核心或两个核心(使用GCC编译)。
性能问题与通过计算线程中的信号调用窗口小部件中的插槽有关。小部件包含一个QImage,我将指向其像素的指针传递给计算线程。线程计算分形并将像素绘制成图像。在每一行的末尾,线程向窗口小部件发出一个信号,告诉它更新主线程中的显示。据我了解,这是一个排队的连接。
使用Windows和单个CPU,更新速度非常慢,比计算速度慢得多。它使程序无法使用。
相关代码类似于Qt文档中的Mandelbrot示例,除了我的信号没有参数,因为Qimage位于小部件而不是线程中,我没有将QImage转换为QPixmap。
有没有人知道问题可能是什么以及如何解决问题?它与调度,时间分片分配有关吗?我需要在MSVC中设置编译器标志吗?或者我需要修改我的程序吗?
非常感谢!
答案 0 :(得分:0)
你说更新比计算慢 - 多慢?您是否进行了任何全面的分析,以确定瓶颈究竟发生在哪里?一个粗略的谷歌找到this profiler可能会帮助你。
请记住,对于较旧的CPU,线程上下文切换非常昂贵。这可能是你问题的一部分,但我不知道具体细节。