5

現在、C# .net xna ゲーム エンジンを開発しています。

更新マネージャー/スケジューラー/イベント システムを使用する方法を見つけようとしています。私は現在、デリゲートを使用して、動的にスケジュールされたタスクとイベントを作成する方法を提供しています。

私は最近、デリゲートが遅くなる可能性があることを読みました。私のゲームのデリゲートはフレームごとに呼び出されていますが、それによってパフォーマンスが低下する可能性があるのではないかと考えていました。

アップデート:

これも見つけましたhttp://blogs.msdn.com/b/shawnhar/archive/2007/07/09/delegates-events-and-garbage.aspx

これは私が心配していたことであり、それを回避する方法があると思います。他のすべての情報をありがとう。

4

5 に答える 5

8

心配する必要はありません。デリゲートは通常の関数呼び出しよりもわずかに遅くなりますが、1 秒間に数百万回呼び出さない限り、気付くとは思えません。

ボトルネックにならない限り、デリゲートに固執することをお勧めします。

于 2010-07-09T00:36:33.793 に答える
1

デリゲートとダイレクト メソッド呼び出しには明らかにパフォーマンス ヒットがありますが、CLR の最新 (v1.1 以降を参照) バージョンでは、インターフェイスを介したメソッド呼び出しとほぼ同じくらい高速です。

大まかなパフォーマンス測定値の表を次に示します: http://msdn.microsoft.com/en-us/magazine/cc507639.aspx

いつものように、パフォーマンスが許容できるかどうかを測定する必要があります。私はパフォーマンスが重要なコード (アニメーション) でデリゲートを使用しており、問題を経験していないので、問題なく動作することを期待しています。

于 2010-07-09T00:39:15.893 に答える
1

あなたの推測 (および私たちの推測) は正確ではなく、必ずしもゲームの実際のパフォーマンスと一致するとは限りません。実際のパフォーマンス ヒットを知る唯一の方法は、少なくとも 1 種類のプロファイリングを行うことです。推測できるのに、なぜ測定する必要があるのでしょうか。

パフォーマンスを実際に測定するだけでなく、次の点を考慮してください。ゲームが 60 fps で実行されている場合 (ペースの速いゲームでは 30 fps でも楽しんでいます。ターンベースのゲームのように遅い場合は 20 fps で対処できます)、可変時間で 300 fps に達することができます。 -step モード、およびデリゲートは全体で 20 フレームのコストがかかります (ちなみに、おそらくそうではないでしょう)...あなたのゲームは、固定時間ステップ モードで 60 fps を維持できます。

于 2010-07-09T01:22:45.503 に答える
1

パフォーマンス ヒットが発生する可能性があるかどうかに関係なく、パフォーマンス ヒット発生するかどうかの方が適切です。デリゲートがある場合とない場合のアプリケーションのパフォーマンスを測定して、パフォーマンスの低下が許容できるかどうかを判断する必要があります。

于 2010-07-09T00:35:48.250 に答える
1

デリゲートが問題でない限り、デリゲートは問題ではありません。プロファイラーはあなたの友達です。

これに注意する必要あるのは、フレームごとにデリゲートを再作成する場合です。この場合、過剰なガベージが生成され、パフォーマンスが低下する可能性があります。ただし、CLR プロファイラーなどのツールを使用して、これが問題かどうかを最初に判断してください。

于 2010-07-09T05:10:20.203 に答える