WPF 动画 FPS 与 CPU 使用率 - 我期望太多了吗?

Cor*_*ton 2 .net c# wpf animation screensaver

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

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

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

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

我可以理解在蹩脚的桌面上较低的帧速率和较高的 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]

“开始”=双字:00000004

WPF 性能套件

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

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

WPF 动画

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

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

Jer*_*ill 6

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

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

路径 CacheMode="BitmapCache" ...