【发布时间】:2012-01-27 03:24:20
【问题描述】:
在这里难住了。之前发过类似的问题。我们有一个相当大的 WPF 应用程序,它在某些机器上运行良好,但在其他机器上,突然之间,其中一个 CPU 内核被固定为 100%(只有一个内核)并且应用程序冻结。它通常在显示上下文菜单或组合框下拉菜单(即弹出控件)时发生,这就是为什么我们无法调试它,因为当时没有用户代码正在执行。这让我们发疯了,因为在大多数机器上它运行良好,但在少数机器上它会死机。
奇怪的是,当我们在 VM 中运行它时,它也运行得很好!疯狂的!不知道是什么原因造成的,或者更重要的是,甚至不知道从哪里开始看,因为正如我所说,没有用户代码正在运行。
这种情况仅发生在我们大约 10% 的机器上,但在这些机器上始终会发生。全部都是干净的(即相对较新的操作系统安装,没有疯狂的应用程序等)并且在规格方面大多相同的机器:相似的 CPU、相似的 RAM、相同的视频驱动程序和服务包。
因此,正如我在标题中所述,任何人都可以提出 WPF 应用程序会固定 CPU 并将应用程序锁定在某些计算机上而不是其他计算机上的可能原因吗?我们只是被难住了!
【问题讨论】:
-
在 xaml 或代码后面或两者中定义的上下文菜单?也许显示一些代码。组合框的同样问题。您是否尝试过非常简单的上下文菜单/组合框?并且由于两者都是弹出窗口,您是否尝试仅显示弹出窗口以查看这是否是核心问题?可能与图形卡/图形驱动程序相关,因为在 VM 图形管理更改时,但你说这两个图形设置是相同的......也许(再次看看问题来自哪里)尝试强制软件渲染。
-
没有可显示的代码。带有一些附加命令的简单标准上下文菜单。检查了“CanExecute”处理程序,那里也没有什么奇怪的事情发生。此外,它们不存在组合框。顺便说一句,我纯粹是在猜测弹出窗口,但这似乎是一件常见的事情。尽管如此,再次发生这种情况时,一切都会冻结,即使是 VS。如果这是一个代码问题,我应该仍然能够闯入它。这也不是 VS 问题,因为安装的应用程序也会发生这种情况,但找不到 VS。发生在我们大约 5-10% 的机器上,但始终存在。
-
WPF Performance Suite 有一些工具可以帮助您找出问题的根源。
-
我们实际上拥有 Red Gate 性能套件,据我了解,这是一个很大的进步,但即使是他们的支持人员也表示他们可以帮助分析代码以及分析性能和内存泄漏,但是代码挂在了甚至用户代码都没有的地方,这真的很痛苦。我们甚至尝试在 VS 中使用 MS 的源代码选项来进入他们的代码以查看发生了什么,但仍然没有骰子。
-
上下文菜单下的图形有多“重”?我有一个应用程序,其中包含大量图像、视频和半透明渐变和反射。它在某些机器上表现不佳。最后我发现使用渐变 alpha 的反射速度大大减慢。
标签: wpf multithreading