所以,我正在构建一个WPF应用程序并在今天进行了测试部署,并发现它的表现非常糟糕。我很惊讶,因为我们在视觉效果或动画方面做得并不多。
我部署在两台机器上:运行应用程序所需的最快和最慢(最慢的PC具有Intel Celeron 1.80GHz和2GB RAM)。该应用程序在较快的机器上运行得很好,但在较慢的机器上却不稳定。当我说“波涛汹涌”时,我的意思是光标跳过,甚至只是将它传递到有焦点的应用程序的任何打开的窗口。
我打开了“任务管理器性能”窗口,可以看到只要应用程序有焦点并且光标在其上移动,CPU使用率就会跳跃。如果我将焦点放在另一个(例如Excel)上,CPU使用率会在一秒后恢复。这发生在两台机器上,但是在较慢的机器上只有明显的波动。我只有非常有限的时间来修补部署机器,因此没有进行大量详细的测试。
应用程序在我的开发机器上运行良好,但我也看到CPU在那里飙升高达10%,只需将光标放在窗口上。
我从MS下载了WPF性能工具并且一直在修补它(在我的开发机器上)。文档说明了Perforator工具中的“帧率”指标:
对于没有动画的应用程序, 这个值应该接近0。
应用程序没有做任何繁重的动画,但当光标在任何窗口上时,帧速率保持在50附近。我测试过的屏幕在网格中有列标题“突出显示”,滚动时会改变颜色和外观的按钮。即使在窗口的空白区域上移动鼠标也会导致相同的帧速率和CPU使用率(似乎与这些次要动画无关)。
(另外,除了两个默认工具 - Perforator和Visual Profiler - 安装到WPF性能工具中之外,我无法弄清楚如何获得任何东西。这可能是一个单独的问题。)
我也有Redgate的分析工具,但我不确定这是否可以解释渲染性能。
所以,我意识到,如果没有具体细节或示例代码(我无法发布),这不是一件容易的事情。我的问题是:
答案 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