受信したすべてのパケットに対して新しいオブジェクトを作成し、データストリームから満たす C# ゲームサーバーがあります。最近ベンチマークした後、次の行に気付きました
var packettype = Opcodes[opcode];
var packet = (Packet)Activator.CreateInstance(packettype.Type);
プロファイリング後、アプリケーション全体で最も多くのリソースを消費しています。
すべてを構造体に変更し、空のパケット本体のキャッシュ テーブルを作成することは機能するように見えますが、多くの再設計が必要になる場合があります。
これの CPU 使用率を実際に削減する良い方法を知っている人はいますか?インスタンス化されたオブジェクトを Opcodes テーブルに保持し、パケットごとに新しいオブジェクトをインスタンス化する代わりに、どういうわけかそれをコピーすることを考えていましたか?
多くのパケットは軽量ですが、複数のフィールドとリストを持つ非常に大きなパケットもあります。
注: 各パケットは、充填される前に 100% まったく同じように作成されます。