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