Application.Run 是我的应用程序中最消耗 CPU 的函数;我可以优化啥?

Posted

技术标签:

【中文标题】Application.Run 是我的应用程序中最消耗 CPU 的函数;我可以优化啥?【英文标题】:Application.Run is the top CPU consuming function in my application; what can I optimize?Application.Run 是我的应用程序中最消耗 CPU 的函数;我可以优化什么? 【发布时间】:2012-02-01 11:10:06 【问题描述】:

我的 WPF 应用程序有一个功能,它可以在后台呈现大量图像,同时在准备好新图像时更新 UI。

对此过程的分析表明,Application.Run 是工作最多的函数,占 43%,三个图形 API 共享“第二昂贵”的位置,每个占 6%。

我在做什么会导致在Application.Run 上花费这么多时间?似乎这种方法的核心是为我的应用程序运行主调度程序,但这并不能帮助我弄清楚调度程序做了这么多事情是什么。我可以获得更细粒度的配置文件吗?

注意:我的意思是System.Windows.Application.Run

【问题讨论】:

【参考方案1】:

事实证明,Visual Profiler(WPF Performance Suite 的一部分)可以提供更详细的 CPU 使用率细分:

这表明,无法解释的 CPU 使用量有一半归结为渲染线程(所以也许我应该不那么频繁地更新 UI),其余大部分都花在了我的 Invoke 回调中(这在我的情况下是不可避免的)。

【讨论】:

对。把一个程序想象成一个马戏团的独轮车选手疯狂地踩着踏板来平衡一大堆杂技演员,每个人都告诉他该走哪条路。他不是问题,问题是更高的。您可以通过几个 stackshots 线程获得相同的信息,它会准确地告诉您哪些代码行是罪魁祸首。

以上是关于Application.Run 是我的应用程序中最消耗 CPU 的函数;我可以优化啥?的主要内容,如果未能解决你的问题,请参考以下文章

Application.Run(form) 永远不会返回(使用 System::Management 之后)

Application.Run 用于宏返回数组

Application.run 不适用于模块

Application.Run()和Form.Show()以及Form.ShowDialog()

将 Application.Run() 放在与初始线程不同的线程中是不是会产生后果?

WINFORM如何关闭主窗口?