当我在Visual Studio 2010中在Line View中剖析我的C#应用程序时,耗时第二的函数被列为System.Windows.Forms.Application.DoEvents()。列表中的第7个是System.Windows.Forms.Form.ShowDialog()。这两项消费量占总排他性样本的8%和2.5%。Visual Studio性能分析:Application.DoEvents()
该程序没有太多的用户交互。用户点击一个按钮,应用程序启动并运行其算法约一分钟,然后停止。在此期间,不存在用户交互,但是,存在大量的CPU和IO使用。
我不确定我明白为什么上述两个函数(DoEvents和ShowDialog)捕获了这么多的独占样本。这两者有什么可以做的吗?
EDIT for Clarification:该应用程序有4个不同的线程。一个线程从外部设备读取数据并将其放入队列中。另一个线程从队列中读取数据并执行数据操作。这个cpu密集线程将操作数据放入另一个队列中。第三个线程读取此队列并将数据定期写入磁盘。所有线程都作为backgroundWorker实现。最后的(第4个)线程是应用程序主Form()本身。它在整个过程中实际上是不活动的。
可以在DoEvents调用上处理画图和窗口更新事件。 Windows绘画很慢,但不应该担心什么。 – CodingBarfield 2011-02-07 17:21:01