【发布时间】:2023-03-19 02:40:01
【问题描述】:
我目前正在为 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;
}
你能帮我找到函数“Something()”吗? 谢谢。
【问题讨论】:
-
您真的可以得出结论,它运行缓慢是因为仅基于 2 台 PC 的硬件加速吗?
-
查看wpftutorial.net/10PerformanceTips.html,特别是#4:防止软件渲染。通过将 AllowsTransparency 设置为 true 或使用旧的 BitmapEffects 来使用透明窗口可能会导致 WPF 在 Windows XP 上的软件中呈现 UI,这会慢得多。
-
感谢 Tseng 提供此链接。其实这个帖子我已经看过了。我的应用程序没有 BitmapEffects 并且 AllowsTransparency 属性设置为 false。
-
@MikeEason,不,实际上我已经在更多 PC 上测试了该应用程序。我只是想通过这种方式来简化情况
标签: c# wpf performance rendering hardware-acceleration