非常に多くのリクエスト (毎秒数千) を処理する WCF サービスがあります。各リクエストにはオブジェクトが含まれているため、逆シリアル化中に DataContractSerializer 内に構築されます。私のサービスはメッセージを処理し、.net ガベージ コレクターによってクリーンアップされます。
問題は、ガベージ コレクションがサービスに問題を引き起こしていることです (要求が必要以上に 100 ミリ秒以上かかる場合があります)。それらを最小限に抑える必要があります。そこで、オブジェクト プーリングを使用する方法を探しています。言い換えれば、データ コントラクト シリアライザーが (GetUninitializedObject を介してオブジェクトを取得するのではなく) オブジェクト プールからオブジェクトを取得するようにし、メッセージの処理が完了したら、クリーニングと再利用のためにプールに解放します。これにより、1 秒間に数千回のメモリ割り当てを回避できます。
これは protobuf-net で可能であることがわかりました ( Using protobuf-net, is it possible to deserialize a message without allocating memory? ) 実際、私は他の場所で protobuf を使用していますが、この特定の状況ではオプションではありません