我有一个WinForms应用程序,它使用XNA在控件中为3D模型设置动画。该应用在数月内一直很好,但最近我开始在动画中经历周期性暂停。设置以调查发生了什么事我已经建立了这些事实:定期GPU性能问题
- 它发生在我的机器上只,其他机器工作正常
- 删除一切从我的渲染循环不提高的问题
在2.我没有实际删除的一切,我限制了我的循环来设置我的GraphicsDevice上的视口,然后做一个GraphicsDevice.Present。
试图进一步挖掘我激发了PIX捕获一些统计数据。两个PIX运行的屏幕截图可以查看here (Run6)和here (Run14)。 Run6使用我的原始渲染循环,而Run14使用裸露的Present循环。
PIX告诉我,GPU是定期做东西,我认为这是导致暂停。这可能是什么原因?或者我该如何去了解GPU究竟在做什么?
更新:因为我通常相信我的代码是完美的(谁在笑?)我从头开始一个新的XNA项目,看它是否展现出相同的行为。因此,启动一个新的XNA 3.1 Windows游戏项目并运行PIX我得到this timeline。相同的周期性暂停。所以在XNA或Direct3D中堆栈中的问题必须降低。
因此,PIX显示GPU正在处理某些事情,我可以看到每个帧内DX调用的列表,计时计算显示暂停发生在IDirect3DDevice9::Present
调用期间(或之后)。
更新2:我以前曾在有问题的机器上安装和卸载过XNA 4.0 CTP。我不能确定这是相关的,但我认为重新安装XNA Game Studio 3.1可能会有所作为。原来是这样。
潜在的问题仍然是一样的(而且赏金仍然存在):可能会影响XNA 3.1(或DirectX)使其表现如何,并且是否存在针对DirectX和/或GPU的任何记录/追踪强大工具那里的水平可以揭示发生了什么?
注:我在具有8GB RAM的Windows 7 x64双核计算机上使用XNA 3.1。
注2:也发布了这个问题在XNA创建者论坛here。
+1 yay为xperf工具!这非常有用! – 2010-05-28 15:29:10