我们有一个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