gpt4 book ai didi

c# - 空 block 是否被优化掉了? C#

转载 作者:行者123 更新时间:2023-12-02 18:19:36 25 4
gpt4 key购买 nike

我正在用 C# 开发一个游戏服务器,每个玩家每秒向我的服务器发送 3 到 5 次特定的数据包。我们将该数据包称为 PacketA。除了确保我收到它之外,我不会对它做任何事情。

由于此数据包发送次数最多,因此我想将其首先放在交换 block 中,这样我就不必进行这么多不必要的比较。编译器最终是否会优化它(这将导致我在 switch block 中进行所有比较?)

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 语句,然后执行一个switch 语句(如果不是 PacketA)。我想最终 switch 语句才是正确的选择。

如果您决定通过反编译来深入了解您的应用程序,您可以使用 Telerik 的新(免费)工具:

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

关于c# - 空 block 是否被优化掉了? C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6210598/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com