编译器优化-是否对空块进行了优化?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#

C#中的switch语句经过优化,可以非常快速地评估要去哪里。它并没有准确地读出选项列表。相反,它创建了一个跳转列表,并对其进行了优化,以确定要执行的案例。这里有一个链接,提供更多信息:

http://www.dotnetperls.com/switch-char

基本上,我建议您将此语句的性能与另一个语句进行比较(例如,仅对第一个case执行if语句,如果不是PacketA,则执行switch语句)。我可以想象,switch语句最终是可行的。

如果你决定通过反编译来挖掘你的应用程序,你可以使用Telerik:的新(免费)工具

http://www.telerik.com/products/decompiling.aspx

分解代码并检查这种情况是否可用。如果它不可用,则编译器对其进行了优化。