我正在用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
2011-06-02 05:11:02