2011-09-12 17 views
-1

xnaとwindowsフォームに問題があります。私はxnaでコントロールを開発しましたが、私はそのフォームをWindowsフォームの中で使っていました。私の問題は、新しいフォームを開くときに始まり、xnaを使ってコントロールを完全にカバーします。それが起こるとき、CPU使用率は50%以上に行き、保持します。しかし、xnaコントロールの小さな部分が見える場合は、CPU使用量はノルマル(1〜10%多かれ少なかれ、それ以下)に低下します。ここでWindowsフォームとxna - 高いCPU使用率

はXNAパラメータの設定は、事前に

parameters = new PresentationParameters(); 

      parameters.BackBufferWidth = Math.Max(width, 1); 
      parameters.BackBufferHeight = Math.Max(height, 1); 
      parameters.BackBufferFormat = SurfaceFormat.Color; 
      parameters.DepthStencilFormat = DepthFormat.Depth24; 
      parameters.DeviceWindowHandle = windowHandle; 
      parameters.PresentationInterval = PresentInterval.Default; 
      parameters.IsFullScreen = false; 

      graphicsDevice = new GraphicsDevice(GraphicsAdapter.DefaultAdapter, 
               GraphicsProfile.Reach, 
               parameters); 

おかげです。

pd:Windows XPでのみ発生しています。窓7では何の問題もありません。

+0

誰が否定的な投票をしたのか分かりません。しかし、私はその人がその質問について何か疑問を持っているかどうかを知りたい。私は彼からの返信をお願いします –

+1

私はあなたにdownvoteをしませんでしたが、あなたの質問が何が起こっているのかを理解するのに十分な情報を提供していないので、あなたは何が間違っているのかを修正する、あるいは理解する努力をしていません。 –

答えて

0

私はこの問題を解決しました。 理由はわかりませんが、動作します。私はちょうど書き終わりXNAのカスタム描画コードで

Thread.sleep(10); 
+0

私はこの問題を "解決した"とは思っていません。それがなくなったら、スレッド間の競合状態が疑わしい。同期コードまたはロックコードを調査します。 –

1

あなたが使用していない場合は、あなたのドロー()関数で

Thread.Sleep(1); 

を配置する必要がありますスリープコマンドを実行すると、XNAは自動的に描画を最大レートで実行しようとします。つまり、コアの1つを切り捨てます。これは、フレーム制限ステップとして有効に機能する。あなたのコンピュータはおそらく1000fps以上でレンダリングできません。 Thread.Sleep(10)を使用するとコンピュータが100fpsに制限されますが、コードが正常に実行されるには2msかかる場合は、Sleep(10)を使用すると80フレームになります。