WPF渲染冻结

9
我遇到了一个GUI冻结问题,与硬件和软件UI渲染有关。
背景:在一个双显示器的XP嵌入式设备上运行两个WPF应用程序(.NET 3.5 SP1),使用DirectX 9.0c。
在某些时候,其中一个应用程序会冻结。但只有渲染部分会冻结,GUI保持活动状态(消息泵处于活动状态,应用程序响应),但渲染不会完成。 冻结可能持续几秒钟或永远。第二个应用程序仍然正常运行。这个错误只发生在双显示器配置中,第二个应用程序是一种催化剂(更多的内存和CPU使用...)
使用Perforator,我发现视频内存使用量在不断地上下波动(参见:screenshot)。 此期间,一个本地线程正在消耗100%的CPU(堆栈跟踪涉及WPFgfx、DirectX、GDI和视频驱动程序)。
通常情况下,当应用程序解冻时,它完全是软件渲染的(使用Perforator带有紫色色调)。同时,停用硬件渲染可以解冻应用程序。

到目前为止,我的结论是我面临着视频内存不足的问题(如在这篇文章中所述的第14点),尝试回退到软件渲染,但是有一个循环在尝试重新使用硬件模式。

我是正确的吗? 这更像是WPF的问题还是视频驱动程序的问题?或者是DirectX的问题? 有一些参数可以调整来解决这个问题吗?


你找到解决这个问题的方法了吗?我遇到了一个非常类似的问题。我的应用程序被迫使用 .NET 3.5。 - BabaBooey
我遇到了类似的问题。冻结是否每次发生在同一个应用程序中?您找到了重现此问题的方法吗?它是否在多台机器上发生? - LukeN
不是重复,但你可能会感兴趣:当你看到“wpfgfx”冻结时,问题可能出在“WPF FontCache”中,请参见https://dev59.com/iIPba4cB1Zd3GeqPrFx6。 - quetzalcoatl
1个回答

7
这听起来像是驱动程序的问题。我建议首先检查是否有驱动程序更新。最好的选择可能是完全禁用硬件加速,因为WPF(特别是在XP上)非常依赖于图形驱动程序。正是出于这个原因,Visual Studio 2010 sp1 在XP上为自身禁用了硬件加速...

嗨,里德,你有关于在XP上禁用VS2010硬件加速的决定的任何文档链接吗?禁用加速是否解决了这些问题?是否有列出显示或不显示问题的驱动程序版本列表? - LukeN
@LukeN:有很多博客文章。例如:http://blogs.msdn.com/b/jasonz/archive/2011/03/03/performance-troubleshooting-article-and-vs2010-sp1-change.aspx(这里有一个很好的描述:http://blogs.msdn.com/b/jasonz/archive/2011/03/03/performance-troubleshooting-article-and-vs2010-sp1-change.aspx) - Reed Copsey
此外,请参见以下链接:http://connect.microsoft.com/VisualStudio/feedback/details/559846/vs2010-bad-performance-scroll-is-extremely-slow# 和 http://connect.microsoft.com/VisualStudio/feedback/details/575376/visual-studio-2010-code-editor-problems,以及 WPF 的图形渲染页面:http://msdn.microsoft.com/en-us/library/aa970912.aspx。 - Reed Copsey
太好了!你有没有想法这些问题在哪个版本的ati或nvidia驱动程序中得到解决?显然,禁用硬件加速是一个选项,但当我们这样做时,我们的帧率变得勉强可接受,而不是丝般顺滑。 - LukeN
1
@LukeN:很遗憾,不行。这非常特定于硬件和驱动程序组合 - 有时,较新的驱动程序与较旧的硬件会出现问题。话虽如此,从我的经验来看,大多数最新的驱动程序在Vista+W7上与大多数硬件都能够正常工作。 - Reed Copsey
事实证明,我们似乎有两个问题。禁用硬件加速似乎已经解决了其中一个问题。我们遇到的另一个问题似乎与嵌入式视频控件存在问题有关http://social.msdn.microsoft.com/forums/en-US/windowsdirectshowdevelopment/thread/37f3785a-4630-4c6b-ade7-1471908f7771/. - LukeN

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接