Mar*_*lon 2 c# compiler-optimization
我正在用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;
}
Run Code Online (Sandbox Code Playgroud)
如果编译器确实对此进行了优化,那么如何更改代码以便我不必检查所有其他数据包ID?
switchC#中的语句以一种允许快速评估去向的方式进行优化.它不会准确地读取选项列表.相反,它会创建一个优化的跳转列表,用于识别要执行的案例.这是一个包含更多相关信息的链接:
http://www.dotnetperls.com/switch-char
基本上,我建议你测试这个语句的性能与另一个语句相比(比如先做一个if语句case,然后再做一个switch语句,如果不是PacketA).我想,最后switch声明是要走的路.
如果您决定通过反编译来挖掘应用程序,可以使用Telerik的新(免费)工具:
http://www.telerik.com/products/decompiling.aspx
| 归档时间: |
|
| 查看次数: |
397 次 |
| 最近记录: |