我有一个 C# 游戏服务器,它为它收到的每个数据包创建一个新对象,然后从 datasteam 填充。在最近对其进行基准测试之后,我注意到了
var packettype = Opcodes[opcode];
var packet = (Packet)Activator.CreateInstance(packettype.Type);
分析后消耗整个应用程序的大部分资源。
将所有内容更改为 struct 并创建空数据包主体的缓存表似乎可行,但可能需要进行大量重新设计。
任何人都知道真正减少 CPU 使用率的好方法,我想在 Opcodes 表中保留一个实例化对象,然后以某种方式复制它而不是为每个数据包实例化一个新对象?
许多数据包是轻量级的,但有些非常大,有多个字段和列表。
注意:每个数据包在填充之前创建 100% 完全相同。