我有一個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