2

XNAを使用してコントロール内の3Dモデルをアニメーション化するWinFormsアプリケーションがあります。このアプリは何ヶ月も問題なく動作していますが、最近、アニメーションが定期的に一時停止するようになりました。何が起こっているのかを調査するために着手し、私はこれらの事実を確立しました:

  1. それは私のマシンでのみ発生し、他のマシンは正常に動作します
  2. レンダリングループからすべてを削除しても問題は改善されません

2.では、実際にすべてを削除したわけではありません。ループを制限して、GraphicsDeviceにビューポートを設定してから、GraphicsDevice.Presentを実行しました。

さらに掘り下げようとして、いくつかの統計をキャプチャするためにPIXを起動しました。2つのPIX実行のスクリーンショットは、ここ(Run6)ここ(Run14 )で表示できます。Run6は元のレンダリングループを使用しており、Run14は必要最低限​​のPresentループを使用しています。

PIXは、GPUが定期的に何かを実行していることを教えてくれますが、これが一時停止の原因であると思います。これの原因は何でしょうか?または、GPUが実際に何をしているのかを知るにはどうすればよいですか?

更新:私は通常、自分のコードが完璧であると信じているので(誰が笑っているのですか?)、同じ動作を示すかどうかを確認するために、新しいXNAプロジェクトを最初から開始しました。したがって、新しいXNA 3.1 Windowsゲームプロジェクトを開始してPIXを実行すると、このタイムラインが得られます。同じ定期的な一時停止。したがって、XNAまたはDirect3Dでは、問題はスタックの下位にある必要があります。

したがって、PIXはGPUが何かに取り組んでいることを示し、各フレーム内で行われたDX呼び出しのリストを確認でき、タイミング計算は、呼び出し中(またはIDirect3DDevice9::Present呼び出し後)に一時停止が発生することを示しています。

更新プログラム2:問題のあるマシンにXNA4.0CTPを以前にインストールおよびアンインストールしました。これが関連していることは確かではありませんが、XNA GameStudio3.1ビットを再インストールすると違いが生じる可能性があると思いました。やったことがわかった。

根本的な質問は同じままです(そして賞金はまだあります):XNA 3.1(またはDirectX)に影響を与えて、このように動作させることができますか?DirectXおよび/またはGPUレベル用のロギング/トレースパワーツールはありますか?何が起こっているのかを明らかにすることができますか?

注: 8GBのRAMを搭載したWindows7x64デュアルコアマシンでXNA3.1を使用しています。

注2:この質問はXNACreatorsフォーラムにも投稿されています

4

4 に答える 4

1

定期的な問題に近いXperfで何かを見つけることができるかどうかを確認することができます。アプリケーションを実行せずに、アプリケーション以外で通常実行されるプログラムを開いたままにします。また、アプリケーションを実行した状態で再試行することもできますが、ビューが乱雑になる可能性があります。

  1. トレースを開始します。これは昇格されたプロンプトで実行します。

xperf -on BASE +LATENCY-stackWalkプロファイル

  1. 問題が追跡されていることを確認するために、かなりの時間待ちます。

  2. トレースを停止し、このように開きます。

xperf -d trace.etl
xperfview trace.etl

  1. グラフを見て、特定の間隔の表を調べて分析し、問題に関連するものを見つけることができるかどうかを確認します。問題を見つける可能性が最も高いのは、DPCと割り込みのセクションです。しかし、CPUまたはI/Oセクションでは奇妙なことかもしれません。幸運を!

また、Xperfとその入手方法の詳細については、これで結果が得られることを願っています。


そうでない場合は、代わりにDWMの改善に使用されているGPUView
を試すことができます。 これは、Windows Performance ToolkitのXperfの横にも含まれているため、両方を簡単に試すことができます。

ログv

...問題が追跡されていることを確認するためにかなりの時間を待ちます...

ログ

gpuview merged.etl

gpuviewがメモリを使い果たした場合は、「/ limit3」を追加するか、vを削除してみてください。

どこかで行き詰まっている場合は、ツールのドキュメントを読んでください。

于 2010-05-28T14:19:39.660 に答える
1

うーん...これはGPUで発生しているようですが、CPUのガベージコレクションの問題のようです。CLRプロファイラーを実行して、速度低下と相関させることができるGCアクティビティのスパイクを確認できますか?

PIXではっきりとわかるので、そうは思われないかもしれませんが、原因の手がかりになるかもしれません。

于 2010-05-21T18:54:15.617 に答える
0

それが自分のマシンでのみ発生している場合、それはドライバーである可能性がありますか?懐疑的であることを許してください、しかしそれは結局64ビットマシンです:D

于 2010-05-25T21:48:50.670 に答える
0

これは、vsyncの問題またはGPUの最後の問題のように見えます。別のバージョンに戻ると修正され、「ボトルネック」が入っIDirect3DDevice9::Presentているので、前のオプションを使用できます。

私はXNAに精通していないので、D3Dの動作がどれだけ公開されているかはわかりませんが、PresentationParametersが何に設定されているかは知っていますか?

具体的には、スワップ効果セットを破棄に設定してみてください。

于 2010-05-28T14:57:37.727 に答える