2010-04-26 46 views
4

我的代碼在Windows窗體下的性能出現問題。 有一個表格,她的佈局取決於構造函數數據,因爲他的佈局必須是OnLoadConstructor生成的。動態Windows窗體組件(性能問題)

我生成簡單,基座FlowLayoutPanel具有其它FlowLayoutPanels,對於每一個都具有LabelTextBoxDataBinding

問題是這樣的很慢,長達20秒,我繪製小於100所控制,從Performace Session我知道的一個問題是在70%處理。第功能:

  1. System.Windows.Forms.Control的。 ControlCollection.Add(類System.Windows.Forms.Control的)
  2. System.Windows.Forms.ControlBindingsCollection.Add(類System.Windows.Forms.Binding)

如何我可以用這個做什麼? 任何人都可以幫我解決這個問題嗎? 如何解決動態表單佈局問題?

+0

你有我的同情心,你可以用stackshots來確切地說明問題是什麼。一般來說,像這樣的問題是爲什麼我使用動態對話框(http://stackoverflow.com/questions/371898/how-does-differential-execution-work)。我有一個適用於Windows窗體的版本,它工作正常,但它屬於我的僱主 – 2010-04-26 16:44:58

回答

2

我最近閱讀的這篇文章有很多關於優化.Net Winforms應用程序性能的想法。 MSDN Article

其中一些可能適用於您的情況的是,如果您檢索的數據是數據綁定控件,則可能需要將其關閉。從用戶界面開始,所以它可以異步檢索數據。

您可以使用Background Worker類執行此操作。

此外,如果只有一些控件不會初始可見,則可以將該工作推遲到以後。

「顯示第一個 」UI時必須執行但不需要的操作可以在顯示第一個UI後系統處於空閒或按需狀態時完成。 「 」例如,如果你有一個TabControl,在啓動時只填充最上面的頁面 「,並在需要時檢索其他頁面的信息。」

+0

是的,這是一個好主意,但實際上我的表單上的所有內容是可見的,但這是未來的好技巧。 – Svisstack 2010-04-26 22:43:26

3

您是否在添加控件時禁用了佈局?

 panel.SuspendLayout(); 
     try 
     { 
      // add controls in a loop/etc here 
     } 
     finally 
     { 
      panel.ResumeLayout(); 
     } 
+0

是的,我有它,在基礎面板上,但應用程序在同一時間工作,如果我得到這個表單結果是一樣的 – Svisstack 2010-04-26 16:21:14