私はC#でゲームサーバーを開発しています。特定のパケットがプレーヤーに毎秒3〜5回送信されます。そのパケットはPacketA
と呼ばれます。私はそれを受け取ることを確認する以外は何もしません。空のブロックは最適化されていますか? C#
このパケットが最も多く送信されるので、最初にスイッチブロックに配置したいので、不要な比較をする必要はありません。コンパイラは、(私はスイッチブロックダウンすべての比較を行うことが原因となる?)とにかく、それを離れて最適化することになります
switch (packetId)
{
case PacketID.PacketA: // I do not want to do anything here.
break; // Just avoid all other packet id comparisons.
case PacketID.PacketB:
HandlePacketB(data);
break;
case PacketID.PacketC:
HandlePacketC(data);
break;
// ...
case PacketID.PacketZ:
HandlePacketZ(data);
break;
}
をコンパイラがこれを離れて最適化しない場合は、どのように私は私のコードを変更することができますので、私は「ドン他のすべてのパケットIDをチェックする必要はありませんか?
これは私の答えになるだろう。多くの人が 'Dictionary 'を使って推薦していますが、コンパイラがこのようなことを内部的にやっていることに気づいていません。私はどちらの場合でもパフォーマンスの違いは実際には分かりません。 –
drharris