2011-06-22 5 views
4

maxBufferPoolSizeの値をmaxBufferSizeより小さくすることは意味がありますか?私の理解から、答えは「いいえ」です。しかし、.NET FrameworkのBufferManagerクラス内のtrue explanation of these valuesは少し低レベルで、少し混乱します。maxBufferPoolSizeをmaxBufferSizeよりも小さくするのは意味がありますか?

奇妙なことは、大きなメッセージテストの場合、「maxBufferSize」の値を「maxBufferPoolSize」の値よりも大きな値にすることができ、動作します。私は、最大の割り当てられたバッファ(maxBufferSize)のために十分な大きさのプール(maxBufferPoolSize)を割り当てなければ失敗すると思いますが、明らかにこれは当てはまりません。

誰でもこの説明をしてください。ありがとう!

+1

私はあなたの理解は正しいと思っており、概念的には意味をなさないと思います。そうでなければ機能するという事実は、あなたに合った価値を使うことを妨げてはいけません。おそらく、WCFチームに説明を求めることができますか? – Bernard

答えて

3

メッセージの寿命が終了すると、保持していたバッファを返そうとします。返されたときにプールが保持するメモリの合計が< = MaxBufferPoolSizeの場合、WCFはバッファを正常に返します。

同様に、メッセージの作成/受信時に、WCFはプールからバッファを取得しようとします。プールにそのサイズのバッファがない場合は、GCを使用して割り当てます。バッファモードでの割り当ての最大サイズは、MaxReceivedMessageサイズによって保護されます。

アプリケーションのメモリ使用量をチェックしてGCパフォーマンスカウンターを見ると、WCFがこれらのバッファーをプールできないため、GCの割り振りと収集に多くの時間がかかることがわかります。

希望しました。

関連する問題