2009-12-04 69 views
2

在嘗試更新舊C++ Builder/Delphi應用程序的外觀時,我啓用了視覺主題(visual styles),並對添加了多少性能主題感到驚訝。例如,我們的主要設置頁面(我們不希望立即重做的開發時間和成本再培訓的原因有11片,200控制怪物對話):啓用XP視覺主題/視覺樣式會導致性能下降

  • 沒有主題啓用:〜0.1秒構建表單及其控件(由QueryPerformanceCounter測量),〜0.9秒從點擊菜單項目到所顯示的表格(如秒錶測量)。對最終用戶來說不是很明顯。
  • 啓用主題:〜0.6秒構建窗體及其控件,〜1.5秒從點擊菜單項到所顯示的窗體。對最終用戶非常明顯。

我在Windows XP桌面和Windows 7虛擬機上獲得了類似的結果。

我意識到我可以採取一些措施來改善這種特殊情況(例如,懶惰地加載對話框的標籤頁或重新設計它的完整版),但是對於主題添加如此顯着的性能影響通常是典型的?有沒有簡單的建議來避免這種性能下降?

+0

您是否將性能問題追蹤到一個特定的事情,還是它的組合? – 2009-12-07 18:12:32

+0

沒有一件事;根本問題顯然只是形式太大而已。 BeginUpdate/EndUpdate幫助,我會考慮創建一次對話框,而不是按需爲我們的下一個版本創建。謝謝你的幫助。 – 2009-12-07 19:16:26

回答

3

哇。我不確定我是否曾經在單一表格上使用過200個控件。這裏有幾個建議。要當一次創建對話框應用程序啓動並需要的,而不是需求創造它時,它顯示

  • 這可能是一個特例。

  • 我也看看在構造函數或OnShow事件中發生了什麼。您是否填充了BeginUpdate/EndUpdate將成爲優勢的所有列表?

  • 在OnResize事件或類似事件中,是否有任何代碼被觸發多次,可能會等到表單創建並運行一次後纔會觸發?

  • 您使用的是什麼樣的控件?如果某種控件的繪製速度特別慢,您可以用更快速的繪畫替換它。不過,這需要進行一些測試。

1

你可以嘗試打開doublebuffering上的控制,我們有很多相同的行爲,它是有點這種做法加快了,但採用應用主題化支持之前也沒辦法表現。

+0

最後回到這個...窗體上的雙緩衝沒有幫助(並且實際上使TPageControl畫圖不正確)。我還沒有嘗試在單個控件上使用雙緩衝,但延遲似乎是在創建控件,而不是繪製它們。 – 2009-12-14 21:10:27