我正在对各个平台的WPF应用程序进行基准测试,并且需要一种简单的方法来确定WPF是使用硬件渲染还是软件渲染。
我记得有一个调用可以确定这一点,但现在找不到它了。
此外,是否有一种简单、基于代码的方法来强制选择其中一种渲染管道?
检查RenderCapability.Tier
[更新]
RenderCapability.Tier >> 16
.NET 4.0提供了在代码中强制使用软件渲染的能力:
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
if (WeThinkWeShouldRenderInSoftware())
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
}
}
查看此文章以获取更多信息。
[HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics]
"DisableHWAcceleration"=dword:00000001
启用硬件加速:
[HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics]
"DisableHWAcceleration"=dword:00000000
查看此MSDN链接以获取更多信息。
基于 RenderingTier 链接,以下是一些代码:
logger.InfoFormat("WPF Tier = {0}",RenderCapability.Tier / 0x10000);
RenderCapability.TierChanged +=
(sender, args) => logger.InfoFormat("WPF Tier Changed to {0}",
RenderCapability.Tier / 0x10000);
我仍在测试和开发中。请查看未来的编辑/答案,了解我找到的内容。
或者使用性能分析工具...
新增复选框,用于着色目标应用程序元素,这些元素使用SW渲染的传统位图效果。
我同意第二个答案,但这只是说明机器使用硬件渲染的能力,而不是应用程序是否实际上使用了硬件渲染。
我制作了一个简单的应用程序,使用画布和旋转矩形的RotateTransform,对于一个使用硬件渲染的应用程序来说,它消耗了太多的CPU。并且'RenderCapability.Tier'值为2,因此有足够的硬件能力来完成它。
为什么还没有实现呢?
回答你问题的后半部分,我认为没有真正的方法可以强制使用一种方式而不是另一种方式。如果可用,硬件渲染会自动使用,否则就使用软件渲染。
如果您需要在软件模式下进行测试,则需要使用低规格的计算机或使用远程桌面查看在另一台计算机上运行的应用程序。除了性能/帧速率降低之外,两者之间在外观上不应该有任何可见差异。使用RenderCapability类来确定是否应禁用动画或效果以获得更好的性能。