2008-09-04 146 views
4

我的應用程序在其表面上有許多控件,並且在運行時動態添加更多控件。Windows窗體應用程序性能

儘管我使用製表符來限制所顯示的控件的數量,並且也使用雙緩衝,但它在重繪(調整大小,最大化等)時仍然會閃爍並出現口吃。

提高WinForms應用程序性能的技巧和訣竅是什麼?

回答

4

我知道的兩件事情可以做,但他們並不總是適用於所有情況。

  1. 你會如果你使用絕對定位爲每個控件(myNewlyCreatedButton.Location.X/Y),而不是使用流佈局面板或表格佈局面板來獲得更好的性能。 WinForms必須做很少的數學試圖找出應該放置控件的位置。

  2. 如果您正在添加/刪除/修改大量控件的單個操作,請在受影響的控件的容器上調用「SuspendLayout()」(無論是面板還是整個窗體) ,並在同一面板上完成工作調用「ResumeLayout()」時。如果您不這樣做,那麼每次添加/刪除/修改控件時,表單都必須執行佈局傳遞,這會花費更多時間。請參閱:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.suspendlayout(VS.80).aspx

雖然,我不確定在調整窗口大小時如何應用這些方法。

2

雖然,我不確定在調整窗口大小時如何應用這些方法。

處理的ResizeBegin和ResizeEnd事件調用SuspendLayout()和ResumeLayout()。這些事件只在System.Windows.Form類中(儘管我希望它們也在Control上)。

3

雖然比一些其他技巧更普遍的,這裏是我的:

當使用了大量的「項目」,儘量避免給他們中的每一個控制,而重複使用的控件。例如,如果您有10 000個項目,每個項目都對應一個按鈕,那麼很容易(以編程方式)創建10 000個按鈕並連接它們的事件處理程序,這樣,當您輸入事件處理程序時,您確切知道哪個元素你必須努力。但是,如果您創建500個按鈕(因爲您知道每次只有500個按鈕在屏幕上可見),並且在按鈕和項目之間引入了一個「映射層」,它會更加高效每次用戶執行某些操作時都會將按鈕重新分配給不同的項目,這會導致更改應該可見的一組按鈕(例如,移動滾動條)。