1

JSON を使用してデータをクライアントにシリアル化する asp.net アプリケーションがあります。負荷が特定のレベルに達すると、アプリは GC で過度の時間を費やし、WinDbg/SOS および関連ツールでしばらく時間を費やした後、生成された JSON のサイズが原因で、かなりの量の LOH 断片化が発生しているように見えます。多くの場合、LOH の 86K 境界を超えるほど十分に大きくなります。

私の質問 2 倍 1) JSON 生成に影響を与え、LOH の断片化を引き起こすこの特定のシナリオを実行した人はいますか? 2) それを処理する方法について何か提案はありますか?

4

1 に答える 1

1

85K を超える多数の文字列を生成している場合、とにかくパフォーマンスに問題があります。

クライアントに送信する前にデータを完全に生成する必要がありますか? JSON ライブラリが Stream/TextWriter へのデータの書き込みをサポートし、クライアント応答 API がそれをサポートしている場合、問題を完全に回避するために一方を他方にチェーンするだけです。

これができない場合は、オブジェクト プーリングに頼らなければならない場合がありますが、これは文字列では機能せず、char[] または byte[] に頼らなければならず (MemoryStream を使用するとこれが簡単になります)、バッキング配列を再利用する必要があります。 . おそらくスレッドごとに 1 つで十分です。異常な大規模な応答によって、基になる配列が膨らみ、その後保持される場合に対処することができます。

于 2009-02-20T18:21:47.193 に答える