WPF:提高在旧PC上运行的性能

WPF:提高在旧PC上运行的性能,wpf,performance,optimization,rendering,Wpf,Performance,Optimization,Rendering,所以,我今天构建了一个WPF应用程序并进行了测试部署,发现它的性能非常差。我很惊讶,因为我们在视觉效果或动画方面做得并不多 我部署在两台机器上:运行应用程序所需的速度最快和最慢的机器(速度最慢的PC有一台Intel Celeron 1.80GHz和2GB RAM)。应用程序在速度较快的机器上运行得很好,但在速度较慢的机器上运行不稳定。当我说“波状”的时候,我的意思是光标跳了起来,甚至只是把它放在任何打开的有焦点的应用程序窗口上 我打开“任务管理器性能”窗口,可以看到每当应用程序有焦点且光标在其上

所以,我今天构建了一个WPF应用程序并进行了测试部署,发现它的性能非常差。我很惊讶,因为我们在视觉效果或动画方面做得并不多

我部署在两台机器上:运行应用程序所需的速度最快和最慢的机器(速度最慢的PC有一台Intel Celeron 1.80GHz和2GB RAM)。应用程序在速度较快的机器上运行得很好,但在速度较慢的机器上运行不稳定。当我说“波状”的时候,我的意思是光标跳了起来,甚至只是把它放在任何打开的有焦点的应用程序窗口上

我打开“任务管理器性能”窗口,可以看到每当应用程序有焦点且光标在其上移动时,CPU使用率就会跳升。如果我将焦点放在另一个(例如Excel),CPU使用率在一秒钟后又会下降。这在两台机器上都发生过,但只有在速度较慢的机器上才可以观察到起伏。我修补部署机器的时间非常有限,所以没有做很多详细的测试

这个应用程序在我的开发机器上运行得很好,但我也看到CPU的峰值高达10%,只是在窗口上运行光标

我从微软下载了WPF性能工具,并一直在修补它(在我的开发机器上)。文档中提到了穿孔机工具中的“帧速率”指标:

对于没有动画的应用程序, 此值应接近0

该应用程序没有执行任何重动画,但当光标位于任何窗口上时,帧速率保持在50左右。我测试的屏幕在网格中有列标题,可以“突出显示”,按钮可以在滚动时改变颜色和外观。即使在窗口的空白区域移动鼠标,也会导致相同的帧速率和CPU使用率(似乎与这些小动画无关)

(另外,除了两个默认工具——Perforator和VisualProfiler——安装到WPF性能工具中之外,我不知道如何将其他工具安装到WPF性能工具中。这可能是一个单独的问题)

我也有Redgate的分析工具,但我不确定这是否能对渲染性能有所帮助

因此,我意识到如果没有细节或示例代码(我无法发布),这不是一件容易解决的事情。我的问题是:

  • 什么是一般的东西看 为了(或避免)在代码中进行改进 表演
  • 使用WPF可以采取哪些步骤 性能工具,以缩小 有问题吗
  • 上面列出的PC规格(英特尔赛扬1.80GHz,2GB内存)是否太慢,以至于无法运行普通的WPF应用程序

您是否将任何
位图效果应用于UI元素?
它们不由GPU处理,所以CPU负责渲染它们。如果使用不当(例如,将OuterGlowBitmapEffect应用于大型复杂元素),可能会对性能造成严重影响


此外,您可能仍然希望尝试使用性能分析器分析您的应用程序。看看是不是您的代码导致了这种情况。

这对于WPF来说是不正常的-我怀疑您的一位开发人员编写的代码在后台运行计时器(或者根据您的描述,更可能是鼠标移动处理程序),这会以某种方式影响UI

如果你有ANTS performance profiler(它真的很好),我会在你的应用程序上运行它并重现问题

一旦你这样做了,蚂蚁应该很快告诉你问题是什么。 如果ANTS根本没有透露任何信息,并且向您显示,实际上在这段时间内,您的代码都没有运行,那么我会怀疑有问题的图形卡驱动程序

您可以通过设置以下注册表项禁用硬件加速,然后重试来测试:

HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics\DisableHWAcceleration to 1
注意:
disablehAcceleration
值应为
DWORD