2011-01-19 126 views
2

我的應用程序的主界面適中。有一個前景類型進度控制。大約40個.NET基本控件。WinForms UI在用戶控件中加載速度較慢

如果所有這些都放入表單本身,它加載速度快,一切看起來都很棒!

我最近移動所有這些控制成用戶控制,然後通過反射,我從磁盤加載組件,然後將它轉換爲(對照)和在我的Form_Load我調用以下:

this.Controls.Add(myUserCtrl); 

由於將所有內容都移動到了用戶控件中,我從2 - 3秒的加載時間變成了15 - 20秒的加載時間。即使我仍在加載相同數量的控件。

任何人都可以解釋爲什麼將控件移動到UserControl會給這種可怕的負載性能?

我已經嘗試了一切,包括調用Suspend/Resume Layout功能。

+0

當您在調試器中暫停它時,它在哪裏掛起? – SLaks 2011-01-19 22:36:11

+0

@Slaks - 您對我刪除帖子的評論證明是正確的。我創建了一個應用程序來測試理論,證據支持您的評論。謝謝! – David 2011-01-19 23:01:34

回答

6

將代碼從移到構造函數。

在Form_Load中,控件的句柄已經被創建,所以所有的更新都需要進行本地調用來更新實際的窗口句柄。
這可能會很慢,這取決於你在做什麼。 (調用BeginUpdate/EndUpdate將有所幫助)

通過將代碼移動到構造函數中,可以在創建句柄之前初始化所有內容。

根據你的代碼做什麼,這不一定會有好處。