WPF应用程序会锁定CPU并锁定某些计算机上的应用程序,而不会锁定其他计算机上的应用程序的原因可能是什么?

WPF应用程序会锁定CPU并锁定某些计算机上的应用程序,而不会锁定其他计算机上的应用程序的原因可能是什么?,wpf,multithreading,Wpf,Multithreading,在这里被难住了。我以前也发过类似的问题。我们有一个相当大的WPF应用程序,在一些机器上运行得很好,但在另一些机器上,突然之间,一个CPU内核被固定在100%(只有一个内核),应用程序冻结。它通常出现在显示上下文菜单或组合框下拉列表(即弹出控件)时,这就是为什么我们无法调试它,因为当时没有执行任何用户代码。这让我们抓狂,因为在大多数机器上,它运行良好,但在少数机器上,它会冻结 奇怪的是,当我们在VM中运行它时,它在那里也运行得很好!疯子不确定是什么导致了这一点,或者更重要的是,甚至不知道从哪里开始

在这里被难住了。我以前也发过类似的问题。我们有一个相当大的WPF应用程序,在一些机器上运行得很好,但在另一些机器上,突然之间,一个CPU内核被固定在100%(只有一个内核),应用程序冻结。它通常出现在显示上下文菜单或组合框下拉列表(即弹出控件)时,这就是为什么我们无法调试它,因为当时没有执行任何用户代码。这让我们抓狂,因为在大多数机器上,它运行良好,但在少数机器上,它会冻结

奇怪的是,当我们在VM中运行它时,它在那里也运行得很好!疯子不确定是什么导致了这一点,或者更重要的是,甚至不知道从哪里开始查找,因为正如我所说,没有用户代码正在运行

这种情况只发生在我们大约10%的机器上,但在这些机器上却一直发生。所有这些都是干净的(即相对较新的操作系统安装,没有疯狂的应用程序等),并且大部分机器规格相同:类似的CPU、类似的RAM、相同的视频驱动程序和服务包


因此,正如我在标题中所说的,有人能提出WPF应用程序会锁定CPU并将应用程序锁定在某些计算机上(而不是其他计算机上)的可能原因吗?我们只是被难住了

糟糕的视频驱动程序?拉动两台机器——一台在发生的地方,一台在没有发生的地方,然后开始分析差异。可能是硬件缺陷,坏的视频驱动程序,这方面的任何东西。WPF使用GPU进行渲染(如果有)。

因为您似乎缺少选项,我建议您在窗口中创建一个新项目,只使用最基本的组合框,几乎什么都不做。这应该有效(选中:-))。然后在组合框中逐个添加特性并进行测试,例如,在添加命令时,从空的开始。这样做直到它“断裂”。因此,您知道哪种功能是罪魁祸首。

你没有说是否所有的工作都与软件渲染有关。

找到了!!事实证明.NET4.0中有一个关于UI自动化和MS引入的更改的bug。这是信息和修复!(注意:即使你打电话给MS,他们也会给你发送一个链接,但始终是一个断开的链接。我设法手动找到了这个链接。)

注意:他们的文章讨论了导致这种行为的一个具体案例,但是如果你在谷歌上搜索,你会看到大量与这些DLL相关的挂起问题。最新消息是,他们承诺在.NET4.5运行时进行修复(摘自微软关于此问题的帖子)

这是KB文章…

…这是实际的修补程序。

在xaml或代码隐藏中定义的上下文菜单,还是两者都定义?可能会显示一些代码。ComboBox也有同样的问题。您是否尝试过使用非常简单的上下文菜单/组合框?既然这两个都是弹出窗口,你有没有试着显示一个弹出窗口,看看这是否是核心问题?可能与图形卡/图形驱动程序有关,因为在VM上图形管理发生了更改,但您声明这两个图形设置相同。。。可能(再次查看问题的来源)尝试强制软件渲染。没有代码显示。带有几个附加命令的简单标准上下文菜单。检查了“CanExecute”处理程序,里面也没有什么奇怪的事情。此外,它们不存在组合框。顺便说一句,我只是猜测弹出窗口,但这似乎是一件平常的事。然而,再次强调,当这种情况发生时,一切都冻结了,即使与之相比,如果这是一个代码问题,我仍然应该能够打破它。这也不是一个VS问题,因为这也发生在安装的应用程序中,找不到VS。发生在我们大约5-10%的机器上,但始终发生在这些机器上。有一些工具可以帮助您找出问题的根源。我们实际上有红门性能套件,据我所知,这是一个很大的进步,但即使是他们的支持人员也表示,他们可以帮助分析代码、分析性能和内存泄漏,但代码挂起的地方甚至连用户代码都找不到,这是一个真正的难题。我们甚至尝试在VS中使用MS的源代码选项来进入他们的代码,看看发生了什么,但仍然没有骰子。上下文菜单下的图形有多“重”?我有一个应用程序,有很多图像、视频、半透明渐变和反射。它在一些机器上的性能很差。最后,我发现使用梯度alpha的反射速度非常慢。是的,正如我上面所说的,我们已经尝试过了。即使是在几乎相同的笔记本电脑上,我相信即使是显卡也是完全相同的,我们甚至重新安装了相同的驱动程序,以防万一,它仍然发生在一个笔记本电脑上,而不是另一个笔记本电脑上。我们真的被难住了。渲染很好。这个应用程序是由一个20人的团队在三年内创建的。我们正准备释放。即使是做与你所说相反的事情,也要花费数周甚至数月的时间。这个应用程序中有太多的内容。。。主要是处理器密集型,而不是用户界面密集型。尽管如此,这个应用程序还是很快,然后你右键点击一些东西,砰!我知道你有一个很大的应用程序。但是对于测试,我建议不需要高质量的代码/源代码控制/。。。在bug出现之前进行简单的文件复制/剪切粘贴肯定不会花费数月或数周的时间。另一个类似的想法可能是在你的应用程序中一点一点地(从零开始)填充litlle一个组合框,使用具有相同接口但“什么都不做”的模型类,并将函数逐个连接到“真实”函数。通过界面中的复选框列表,可以逐个启用或不启用此映射。两个死链接:-(尝试用谷歌搜索知识库本身:
microsoft知识库2484841