.Net4.0を使用したゲームサーバープロジェクトがあります。私はMemoryCacheクラスを使用しており、複数のユーザーが同時に変更できる多くのオブジェクトをキャッシュして、I/Oと同期を高速化しています。最近、ゲームが公開された後、デザインに問題があることに気づきました。これらのキャッシュされたオブジェクトは長寿命のオブジェクトであるため、すべてGC gen 2に移動し、割り当てを解除するのが困難です。そのため、gen 2ヒープは非常に大きくなり(5日後に約8ギガバイト)、完全なGCには時間がかかりすぎます。
グーグルで何日も過ごした後、大きな第2世代のヒープを回避するために、長寿命のオブジェクトを使用しないのがおそらく最善の方法だと思います。しかし、私は何をすべきかわかりません。これらのオブジェクトはdbから読み込まれ、ユーザーリクエストによって変更され、dbに保存されます。複雑すぎて、byte []にシリアル化して、memcachedに保存することはできません。シリアル化することもできます(memcachedから読み取る->変更->書き込み)。 back)もスレッドセーフな操作ではありません。
助言がありますか?