2017-04-03 26 views
-1

在工作中,我繼承了一個龐大的代碼庫。舊版本使用VC6.0編​​譯,在Windows XP和32位Windows 7上運行良好。四核計算機專門用於特殊行業的現場使用。傳統的C++代碼庫很好用,只能用VC6.0編​​譯。

管理升級到VC2005和VC2013,但是,由較新的編譯器生成的二進制文件會產生非常高的CPU使用率,因爲某個UI不可用。

嘗試了幾個配置文件,但得到了不同的結果。例如,一個指向PostMessageA,另一個指向LineTo(MFC函數)。

任何線索,我應該看看找到原因?

+2

你確定你已經涵蓋了從VC 6.0移植到VC 2013的所有問題嗎?這是一個重大的跳躍和相當數量的工作。您可能需要將所涉及的重大變更清單彙總在一起,以審查可能不僅速度緩慢但由於在端口中遺漏而被破壞的事件。 –

+2

如果UI不可用並且它是MFC程序,我會檢查幾件事情。首先,我會看看OnIdle處理中發生了什麼。試着評論一下事情,看看回應是否改善。接下來,檢查你的ON_COMMAND_UPDATE_UI處理程序。嘗試在消息映射中註釋它們。是的,你的程序可能無法正常工作,但如果UI更具響應性,請嘗試將它們逐個取消,直到找到罪魁禍首。另外,看看爲什麼你這麼調用PostMessage()和LineTo()。 Profiler指向PostMessage是我的一面紅旗。 –

+0

喬,謝謝你的建議! Avi's也很有意義。 –

回答

-4

我很少信任配置器。我所做的一件事就是反覆暫停調試器,看看它在哪裏結束。如果它繼續以類似的調用堆棧結束,那麼問題可能就在這裏。

當然,如果你有很多的線程,你可以玩凍結個別線程和按播放/暫停。當然,如果有很多線程內依賴關係,這將是困難的。

+1

如果你不信任分析器,那麼我建議你嘗試使用它們。在我的經驗中,'perf'(在Linux上)和'VTune'(在Windows上)都給出了非常準確的(可操作的)結果。他們需要努力學習如何使用,但這是值得的。即使'gprof'也能提供有用的結果。 –

+1

這不是一個答案,而是一個評論。 –