2

为我的妻子http://cchearts.codeplex.com/制作屏幕保护程序,虽然我已经能够提高低端机器上的 FPS,但 CPU 使用率似乎仍然很高。

这是我从几个 5 分钟的采样周期中得出的一些数字:

在 Core 2 Duo T7500 @ 2.2GHz、3GB 内存、NVIDIA Quadro NVS 140M (128MB)、Vista [我的开发笔记本电脑] 上约 60FPS 35% 平均 CPU

在 Pentium D @ 3.4GHz、1.5GB 内存、标准 VGA 图形适配器(未知)、2003 服务器 [一个蹩脚的桌面] 上 ~40FPS 50% 平均 CPU

我可以理解在糟糕的桌面上较低的帧速率和较高的 CPU 使用率,但它似乎仍然很高,我的开发笔记本电脑上的 35% 似乎也很高。

我真的很想分析应用程序以获取更多详细信息,但我也有问题,所以我想知道我是否做错了什么(以前从未分析过 WPF)。

WPF 性能套件:

进程启动错误

无法附加到进程:CCHearts.exe 你想杀死它吗?

当我在尝试启动后单击取消时会出现此错误消息。如果我不点击取消,它就会闲置在那里,我想等待附加。

性能资源管理器:

无法启动 C:\Projects2\CC.Hearts\CC.Hearts\bin\Debug (USEVISUAL)\CCHearts.exe。上次尝试分析应用程序未成功完成。请重新启动应用程序。

性能的输出窗口:

剖析开始了。分析进程 ID 5360 (CCHearts)。进程 ID 5360 已退出。数据写入 C:\Projects2\CC.Hearts\CCHearts100608.vsp。剖析完成。PRF0025:未收集数据。剖析完成。

所以我一直想提高性能,但没有具体的方法来确定瓶颈在哪里。在这一点上已经相对成功地投掷飞镖,但我现在已经超越了:)


概括:

到目前为止进步很大...

性能资源管理器

问题:不工作,错误信息模糊。

解决方案:使用命令行版本获取一条真正的错误消息,将我指向该线程,指出这是一个 Symantec dll 阻止了我。设置以下注册表项可解决问题:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SysPlant]

“开始”=dword:00000004

WPF 性能套件

问题:不工作,没有错误信息。

解决方案:使用Windows SDK 7.1中为 .NET 4 设计的 WPF 性能套件,而不是 Windows SDK 7 中的先前版本(我觉得很傻 :-P)

WPF 动画

问题:与 FPS/感知工作负载相比,CPU 使用率较高。

解决方案:这里和那里有很多好的调整。但是正如 Jeremiah Morrill 所指出的,巨大的改进是缓存组合。检查变更集

4

3 回答 3

6

我下载了你的代码,在我的四核 2.6ghz 上看到了 ~20-28% 的 CPU 使用率。通过添加缓存组合,我能够将其降低到约 6-8% 的 CPU。

我使用“DEBUG”而不是“DEBUG(USEVISUAL)”进行编译,在 Heart.xaml 中我将 BitmapCache 添加到路径中:

路径 CacheMode="BitmapCache" ...

于 2010-06-09T01:15:48.357 回答
0

您不想过度优化。需要回答的第一个问题是大多数屏幕保护程序的性能是什么?

如果一切都占用 50% 的 CPU,那么我不会担心(我怀疑是这种情况)。如果您想在盲目投掷飞镖之前最好地节省周期,请确保您真正了解 WPF 的 3D 方面。

这是最好的起点

最大化 WPF 3D 性能

于 2010-06-08T17:56:51.133 回答
0

我注意到在 Celeron 1.1Ghz 上类似的稳定高 CPU 使用率 (~95%),但我从未注意到由于打开动画而导致任何性能下降。我从未量化 FPS,尽管我怀疑它相当低。我的印象是 WPF 遵循机会主义的资源利用策略,尽其所能获得最好的质量,但不会干扰其他处理。如果你用其他任务加载 CPU,我怀疑与图形相关的 CPU 使用率会相应下降。

于 2010-06-08T17:58:21.353 回答