我們有一個C#WinForms應用程序非常慢,並且通常消耗50%的CPU時間。WinForms應用程序分析
通過使用DotTrace,我們發現最耗時的工作是在UI線程上。 特別是,System.Windows.Forms.DataGridView.WndProc(消息&)消耗大部分時間。
我知道程序在DataGridView控件上調用Invoke或BeginInvoke。這相當於向DataGridView控件發送消息。但是,在調用線程上發送這些消息的時間非常短,大部分時間都花在UI線程上來處理這些消息。
因此,dotTrace可以發現最耗時的工作是在UI線程上,但它無法確定哪些線程發出這些消息。
那麼我能做些什麼來找到這些線程?
「我們有一個非常慢的C#Winform應用程序,它通常假定CPU時間爲50%。」 - 真的?如果速度真的很慢,我預計峯值會比這更高......你有沒有發生某種「UI更新風暴」?我的意思是,UI更新觸發其他更新和級聯... –
@MitchWheat是的,我用Windows任務管理器來監視程序。 CPU使用率一直在50%左右。實際上,該計劃是一個交易平臺。它不斷接收來自外部的報價信息,訂單狀態信息等,進行一些計算並更新UI。我們正在編寫一個自動交易的準則,所以它每秒發出大約100個訂單。我們發現它無法快速處理所有傳入消息。所以我們需要找出什麼是瓶頸。如果是UI,我們需要找出導致UI更新的原因,並可能會降低更新頻率。 – rmm2014
您可能在DataGridVew中有一個事件,它具有很長的進程和/或觸發多次或可能無休止地激活,例如單元值更改或添加行時。 – Jade