为我的妻子http://cchearts.codeplex.com/处理屏幕保护程序,虽然我已经能够在低端计算机上改进FPS,但CPU使用率仍然非常高。
以下是我从几个5分钟的采样期间开始的一些数字:
~60FPS Core 2 Duo T7500 @ 2.2GHz,3GB内存,NVIDIA Quadro NVS 140M(128MB),Vista [我的开发笔记本电脑]平均CPU占35%
~40FPS奔腾D平均CPU为3.4GHz,1.5GB内存,标准VGA图形适配器(未知),2003服务器[蹩脚桌面]
我可以理解蹩脚桌面上较低的帧速率和较高的CPU使用率,但它仍然看起来相当高,我的开发笔记本电脑上的35%似乎也很高。
我真的想分析应用程序以获取更多详细信息,但我也遇到问题,所以我想知道我做错了什么(之前从未介绍过WPF)。
WPF Performance Suite:
处理启动错误
无法附加到流程: CCHearts.exe 你想杀它吗?
尝试启动后单击取消时会出现此错误消息。如果我没有点击取消它就在那里闲置,我想等着附上。
Performance Explorer:
无法启动C:\ Projects2 \ CC.Hearts \ CC.Hearts \ bin \ Debug(USEVISUAL)\ CCHearts.exe。以前尝试分析应用程序的尝试未成功完成。请重新启动该应用程序。
演出中的输出窗口:
分析已开始。 分析过程ID 5360(CCHearts)。 进程ID 5360已退出。 数据写入C:\ Projects2 \ CC.Hearts \ CCHearts100608.vsp。 分析完成。 PRF0025:未收集任何数据。 分析完成。
所以我不想改善性能,但没有具体的方法来确定瓶颈在哪里。此时投掷飞镖相对成功,但我现在超越了这一点:)
要点:
到目前为止很多进展......
Performance Explorer
问题:无效,模糊的错误消息。
解决方案:使用command line version获取一条真实的错误消息,指出我thread指出这是赛门铁克dll阻止我。设置以下注册表项修复了问题:
[HKEY_LOCAL_MACHINE \ SYSTEM \ CURRENTCONTROLSET \服务\ SysPlant]
“开始”= DWORD:00000004
WPF Performance Suite
问题:无效,没有错误消息。
解决方案:使用Windows SDK 7.1中为.NET 4设计的WPF Performance Suite,而不是Windows SDK 7中的先前版本(我觉得很傻:-P)
WPF动画
问题:与FPS / percieved工作负载相比,CPU使用率较高。
解决方案:这里和那里有很多好的调整。但Jeremiah Morrill所指出的巨大的改善是Cached Composition。查看changesets。
答案 0 :(得分:4)
我下载了你的代码,在我的四核2.6ghz上看到了大约20-28%的CPU使用率。通过添加缓存的组合,我能够将其降低到~6-8%的CPU。
我使用“DEBUG”编译,而不是“DEBUG(USEVISUAL)”,在Heart.xaml中我将BitmapCache添加到路径中:
Path CacheMode =“BitmapCache”...
答案 1 :(得分:0)
您不希望过度优化。需要回答的第一个问题是大多数屏幕保护程序的性能是什么?
如果一切都需要50%的CPU,那么我不担心(我怀疑是这种情况)。如果你想在盲目投掷飞镖之前保存最好的周期,请确保你真正了解WPF的3D方面。
这是最好的起点
答案 2 :(得分:0)
我注意到Celeron 1.1Ghz上的CPU使用率相当稳定(~95%),但我从来没有注意到因打开动画而导致性能下降。我从未量化FPS,但我怀疑它很低。我的印象是WPF遵循机会主义的资源利用策略,尽可能地获得它能够获得的最佳质量,但并不是因为它干扰了其他处理。如果你用其他任务加载CPU,我怀疑与图形相关的CPU使用率会相应下降。