首页 文章

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

提问于
浏览
9

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

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

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

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

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

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

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

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

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

因此,我意识到在没有细节或示例代码(我无法发布)的情况下进行故障排除并不容易 . 我的问题是:

  • 在代码中要寻找(或避免)以提高性能的一般常见事项是什么?

  • 使用WPF性能工具可以采取哪些步骤来缩小问题范围?

  • 上面列出的PC规格(带有2GB RAM的Intel Celeron 1.80GHz)是否太慢而无法运行甚至是vanilla WPF应用程序?

2 回答

  • 3

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

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

  • 0

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

    如果你有ANTS性能分析器(它真的很好)我会在你的应用程序上运行它并重现问题 .

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

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

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

    注意: DisableHWAcceleration 值应为 DWORD

相关问题