2014-02-10 39 views
0

我有用於交易應用程序的Windows窗體,它必須顯示大量更新非常迅速(每秒4次)的信息。如何使人口稠密的C#Windows窗體UI更具響應性

我正在使用的Windows窗體有很多控件(超過150個按鈕和文本框)和6個datagridviews以及多行顯示信息。我有使用不同的線程來執行耗時的操作(HTTPRequests和各種數學運算),但我仍然發現GUI感覺呆滯。特別是,我注意到,當我向窗體添加更多控件時,事情會變慢,即使這些額外的控件真的在「做」任何事情。

任何人都可以解釋爲什麼僅僅存在額外的控件應該會使圖形用戶界面的響應速度降低和/或推薦完全不同的方法嗎?也許我不應該使用Windows窗體?

謝謝。

+5

考慮使用WPF。 – SLaks

+0

用戶界面仍然綁定到一個線程和一個消息泵,這將會瓶頸你,正如@SLaks建議的,轉向WPF。 – Lloyd

+0

您是否在UI線程上啓動異步http請求? – spender

回答

1

如果不知道代碼,很難說具體的東西。

一些一般的想法:

  • 從你的描述,它的聲音對我來說,就像你的應用程序是非常繁忙的重繪所有的控制。嘗試試用SuspendLayout()ResumeLayout()Invalidate()只有那些真正需要重繪的控件。
  • 檢查在窗體和ChildControls上是否啓用DoubleBuffering,默認情況下應該爲大多數控件激活它。但要確保你已經擁有了它。
  • 根據您使用的.NET Frameworkversion,檢查您是否可以使用async/ await功能來保持響應。
  • 請參閱MSDN雜誌文章「Give Your .NET-based Application a Fast and Responsive UI with Multiple Threads」。這是幾天,但仍然是絕對有效的。
  • 某些events被觸發得比您預期或需要的次數多。檢查那些導致控件重新繪製的事件(即,如果這些事件太頻繁發生,這將是您添加要顯示給用戶的值)。
+0

+1爲DoubleBuffering,如果我記得默認情況下這不會打開窗體。 – Matt

0

你的控件需要大量的內存,我想知道你爲什麼這麼多,你是否考慮過在需要的時候創建控件。雙緩衝是必須的,但如果你堵塞內存,它將無法幫助你進行圖形顯示。您需要使用性能計數器來分析程序,找出問題所在,例如您是否正確處理? 你也使用太多的線程?你使用線程池,如果不是,你應該! 您的控件是否加載了數據? 我會考慮更多,但分析是你需要做的下一步。

相關問題