2Dタイルベースのゲームを作っています。私のテストレベルの中には、タイルが少ないものもあれば、テスト目的で500,000個あるものもあります。Visual Studioに付属のパフォーマンスプロファイラーを実行すると、ボトルネックがわかります。
こんなに時間がかかる正確な理由は何ですか?このような状況を回避するにはどうすればよいですか?
UPD:気にしないでください。表示されているタイルを200個まで通過するのではなく、アレイ全体を通過しているだけです。
2Dタイルベースのゲームを作っています。私のテストレベルの中には、タイルが少ないものもあれば、テスト目的で500,000個あるものもあります。Visual Studioに付属のパフォーマンスプロファイラーを実行すると、ボトルネックがわかります。
こんなに時間がかかる正確な理由は何ですか?このような状況を回避するにはどうすればよいですか?
UPD:気にしないでください。表示されているタイルを200個まで通過するのではなく、アレイ全体を通過しているだけです。
.Visibleはプロパティです。これがボトルネックである理由を理解するには、そのゲッターの実装を調べる必要があります。単純なブール値のように見えますが、舞台裏では複雑になる可能性があります。
個々の可視性プロパティ/フィールドの評価に多くの時間がかかるわけではありません-それはあなたがそれを50万回行っているということです-それは合計します。これはプロファイラーがボトルネックであると推定するものであるため、アイテムの大部分がVisibility
falseに設定されていることを意味します。そうでない場合、Draw()
メソッド呼び出しがボトルネックとして表示されると想定します。これを最適化するための1つのアプローチは、表示されているアイテムを分離し、それらを反復処理することだけです。
500kは典型的なシナリオですか?実際のニーズに応じて、複雑さは大きく異なることに注意してください。
本当に500kタイルを処理する必要がある場合は、表示されているタイルの2番目のリスト、またはそれらの表示されているタイルの配列インデックスを含むintのリストがあります。
特定のプロパティがオンになっているオブジェクトを見つけるための順次チェックは、「n」回の反復を実行するという最悪のシナリオを意味します。ここで、「n」はレコードの総数です。これは確かにボトルネックです。
表示されているアイテムのコレクションを個別に保持することをお勧めします。