私は長蛇の列を書くつもりでしたが、ここでそれを要約します:
XNAを介してNESのグラフィカルなオールドスクールスタイルをエミュレートしようとしています。ただし、私のFPSは低速で、フレームあたり65Kピクセルを変更しようとしています。すべての65Kピクセルをループして任意の色に設定すると、64FPSになります。どの色をどこに配置するかを調べるために作成したコードで、1FPSを取得します。
オブジェクト指向のコードが原因だと思います。
現在、私は物事を約6つのクラスに分けており、ゲッター/セッターがいます。少なくともフレームごとに360Kのゲッターを呼び出していると思いますが、これはかなりのオーバーヘッドだと思います。各クラスには、カスタム列挙、int、Color、またはVector2Dバイトを含む/および-または1Dまたは2D配列が含まれます。
すべてのクラスを1つにまとめて、各配列のコンテンツに直接アクセスした場合はどうなりますか?コードは混乱しているように見え、オブジェクト指向コーディングの概念を捨てますが、速度ははるかに速いかもしれません。
配列内のデータを取得/設定しようとするとブロック単位で実行されるため、アクセス違反についても心配していません。たとえば、配列へのすべての書き込みは、配列からデータにアクセスする前に行われます。
キャストに関しては、カスタム列挙、int、Color、およびVector2D、バイトを使用していると述べました。 .net Framework、XNA、XBox、C#で最も速く使用およびアクセスできるデータ型はどれですか?絶え間ないキャストがここでのスローダウンの原因かもしれないと思います。
また、数学を使用してデータを配置するインデックスを決定する代わりに、事前に計算されたルックアップテーブルを使用したので、フレームごとの定数の乗算、加算、減算、除算を使用する必要はありません。:)