2011-08-28 28 views
0

我正在開發一個使用Qt的跨平臺分形探險器。我在使用Windows XP(使用MSVC Express 2010編譯的程序)在單核CPU上運行時遇到性能問題,我沒有嘗試過其他版本的Windows。有了兩個內核,程序運行良好。它在Linux下運行良好,可以使用一個內核或兩個內核(使用GCC編譯)。Windows XP上單核CPU的Qt線程問題

性能問題與通過計算線程中的信號調用小部件中的插槽有關。該小部件包含一個QImage,並將其像素的指針傳遞給計算線程。線程計算分形並將像素繪製到圖像上。在每行結束時,線程向小部件發出一個信號,告訴它更新主線程中的顯示。據我瞭解,這是一個排隊的連接。

對於Windows和單個CPU,更新速度非常慢,比計算速度慢得多。它使程序無法使用。

相關代碼與Qt文檔中的Mandelbrot示例類似,但我的信號沒有參數,因爲Qimage位於窗口小部件中,而不是線程,並且我沒有將QImage轉換爲QPixmap。

有沒有人有任何想法可以解決問題,以及如何解決它?這與調度,時間片分配有關嗎? MSVC中是否存在需要設置的編譯器標誌?或者我需要修改我的程序?

非常感謝!

+1

您說的代碼與Mandelbrot示例類似 - Mandelbrot示例是否也展示了該問題?換句話說,問題可能是由於你列出的差異或不是? –

+0

這是一個好主意,我將不得不嘗試。 –

回答

0

你說這個更新比計算慢 - 多慢?你有沒有做過任何全面的分析,看看究竟發生了哪些瓶頸?粗略谷歌發現this profiler哪些可能會幫助你。

請記住,對於較老的CPU,線程上下文切換非常昂貴。這可能是你的問題的一部分,雖然我不知道具體情況。

+0

不,我沒有做過任何分析,感謝您的建議。如果我禁用了行更新並且只在計算結束時進行更新,那麼只需幾秒鐘即可完成。隨着更新,它需要更多的時間。我必須時間更精確。 –

+0

我嘗試了每20ms或每行發送更新信號,以最後一個爲準。這極大地提高了性能,所以看起來上下文切換是罪魁禍首。我將不得不重新設計一些代碼。謝謝您的幫助。 –

+0

Np,很高興我能幫上忙。 – pg1989