编译器优化-是否对空块进行了优化?C#
本文关键字:优化 是否 编译器 | 更新日期: 2023-09-27 17:58:17
我正在用C#开发一个游戏服务器,每个玩家每秒会向我的服务器发送3到5次特定的数据包。我们将该数据包称为PacketA
。除了确保收到它,我什么都不做。
由于这个数据包发送得最多,我想把它放在交换机块的第一个,这样我就不必进行太多不必要的比较。编译器最终会优化它吗(这会导致我在切换块上进行所有比较?)
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了?
C#中的switch
语句经过优化,可以非常快速地评估要去哪里。它并没有准确地读出选项列表。相反,它创建了一个跳转列表,并对其进行了优化,以确定要执行的案例。这里有一个链接,提供更多信息:
http://www.dotnetperls.com/switch-char
基本上,我建议您将此语句的性能与另一个语句进行比较(例如,仅对第一个case
执行if
语句,如果不是PacketA
,则执行switch
语句)。我可以想象,switch
语句最终是可行的。
如果你决定通过反编译来挖掘你的应用程序,你可以使用Telerik:的新(免费)工具
http://www.telerik.com/products/decompiling.aspx
分解代码并检查这种情况是否可用。如果它不可用,则编译器对其进行了优化。