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

时间:2010-04-23 13:33:22

标签: wpf performance optimization rendering

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

我部署在两台机器上:运行应用程序所需的最快和最慢(最慢的PC具有Intel Celeron 1.80GHz和2GB RAM)。该应用程序在较快的机器上运行得很好,但在较慢的机器上却不稳定。当我说“波涛汹涌”时,我的意思是光标跳过,甚至只是将它传递到有焦点的应用程序的任何打开的窗口。

我打开了“任务管理器性能”窗口,可以看到只要应用程序有焦点并且光标在其上移动,CPU使用率就会跳跃。如果我将焦点放在另一个(例如Excel)上,CPU使用率会在一秒后恢复。这发生在两台机器上,但是在较慢的机器上只有明显的波动。我只有非常有限的时间来修补部署机器,因此没有进行大量详细的测试。

应用程序在我的开发机器上运行良好,但我也看到CPU在那里飙升高达10%,只需将光标放在窗口上。

我从MS下载了WPF性能工具并且一直在修补它(在我的开发机器上)。文档说明了Perforator工具中的“帧率”指标:

  

对于没有动画的应用程序,   这个值应该接近0。

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

(另外,除了两个默认工具 - Perforator和Visual Profiler - 安装到WPF性能工具中之外,我无法弄清楚如何获得任何东西。这可能是一个单独的问题。)

我也有Redgate的分析工具,但我不确定这是否可以解释渲染性能。

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

  • 有什么一般要看的东西 代码中的(或避免)改进 性能
  • 使用WPF可以采取哪些步骤 性能工具缩小了 问题?
  • 上面列出的PC规格(带有2GB RAM的Intel Celeron 1.80GHz)是否太慢而无法运行甚至是vanilla WPF应用程序?

2 个答案:

答案 0 :(得分:3)

您是否将任何BitmapEffect - s应用于您的UI元素? 它们不由GPU处理,因此CPU负责渲染它们。如果使用不当(例如,将OuterGlowBitmapEffect应用于大型复杂元素),则会对性能产生严重影响。

此外,您仍可能想尝试使用性能分析器来分析您的应用。只是为了看看你的代码是不是导致了这个问题。

答案 1 :(得分:0)

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

如果您有ANTS性能分析器(非常好),我会在您的应用上运行它并重现问题。

一旦你做完了,ANTS应该很快告诉你问题是什么。 如果ANTS根本没有透露任何内容,并向您显示实际上您的代码在此期间没有运行,那么我会怀疑有错误的显卡驱动程序。

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

HKEY_CURRENT_USER\Software\Microsoft\Avalon.Graphics\DisableHWAcceleration to 1

注意:DisableHWAcceleration值应为DWORD