我目前正在开发Windows XP,7和8的应用程序。 为了测试这个应用程序,我使用了两台计算机。
启用硬件加速时:
禁用硬件加速时:
因此,我想基于启动应用程序的计算机禁用硬件加速。为此,我目前正在使用以下代码:
public partial class App : Application
{
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
//Try to improve performances
int renderingTier = (RenderCapability.Tier >> 16);
if(renderingTier < 2)
{
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
}
}
}
问题是两台计算机都有RenderingTier = 2.这就是我想替换
的原因 if(renderingTier < 2)
{
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
}
通过
if(renderingTier < 2 || Something())
{
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
}
你能帮我找到功能&#34; Something()&#34; ? 谢谢。
答案 0 :(得分:3)
为什么不让用户决定他/她是否想要使用硬件或软件渲染,而不是硬编码?只需在应用程序中包含一个用户可以切换的设置。
它简化了您的任务,最重要的是,您无需硬编码选择其中一个的标准。
除此之外:在构建渲染控件之前,它还可能有助于找出 为什么 渲染性能很慢,看看是否可以改进它。< / p>
答案 1 :(得分:0)
/// <summary>
/// Reduce CPU Consumption for WPF Animations according to computer performance
/// WPF draws animations at 60 frames per second. You can reduce this to a lower optimal rate, resulting in less CPU usage.
/// </summary>
/// <param name="fps"></param>
private void Optimize()
{
int displayTier = (RenderCapability.Tier >> 16);
if (displayTier < 2) // No hardware acceleration
{
RenderOptions.ProcessRenderMode = RenderMode.SoftwareOnly;
Timeline.DesiredFrameRateProperty.OverrideMetadata(typeof(Timeline), new FrameworkPropertyMetadata { DefaultValue = 24 });
}
else // Supports hardware acceleration
{
RenderOptions.ProcessRenderMode = RenderMode.Default;
Timeline.DesiredFrameRateProperty.OverrideMetadata(typeof(Timeline), new FrameworkPropertyMetadata { DefaultValue = 60 });
}
}