【发布时间】:2011-06-02 04:59:04
【问题描述】:
我正在用 C# 开发一个游戏服务器,每个玩家每秒 3 到 5 次将特定数据包发送到我的服务器。我们将该数据包称为PacketA。除了确保我收到它之外,我不会对它做任何事情。
由于这个数据包被发送的最多,我想把它放在开关块的第一个,这样我就不必做太多不必要的比较了。编译器最终会优化它吗(这将导致我在 switch 块中进行所有比较?)
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?
【问题讨论】: