Cha*_*ler 31 wpf rendering pipeline
我在各种平台上对WPF应用程序进行基准测试,我需要一种简单的方法来确定WPF是使用硬件还是软件渲染.
我好像回忆起一个确定这个问题的电话,但现在不能把它放在手上.
另外,是否有一种简单的,基于代码的方式来强制一个渲染管道而不是另一个?
rud*_*ler 35
检查RenderCapability.Tier
[ 更新 ]
RenderCapability.Tier >> 16
use*_*509 11
.NET 4.0提供了在代码中强制进行软件渲染的功能:
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
if (WeThinkWeShouldRenderInSoftware())
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
}
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅此帖子.
基于RenderingTier链接,这里有一些代码:
logger.InfoFormat("WPF Tier = {0}",RenderCapability.Tier / 0x10000);
RenderCapability.TierChanged +=
(sender, args) => logger.InfoFormat("WPF Tier Changed to {0}",
RenderCapability.Tier / 0x10000);
Run Code Online (Sandbox Code Playgroud)
我还在测试和研究这个问题.查看我发现的未来编辑/答案.
也许以下内容可以帮助你解决问题的第二部分,也就是说,你可以强制一个渲染管道覆盖另一个:
您可以更改注册表设置以禁用硬件加速并强制软件呈现始终发生.我们经常使用它来查看我们看到的特定问题是否与视频驱动程序有关.作为我所谈论的一个例子,请参阅此WPF论坛帖子.
这里需要注意的一件显而易见的事情是,这会影响所有 WPF应用程序,实际上只应用于测试目的.
要禁用硬件加速:
[HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics]
"DisableHWAcceleration"=dword:00000001
Run Code Online (Sandbox Code Playgroud)
要启用硬件加速:
[HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics]
"DisableHWAcceleration"=dword:00000000
Run Code Online (Sandbox Code Playgroud)
查看此MSDN链接以获取更多信息.