将maxBufferPoolSize设置为小于maxBufferSize有意义吗?

4
有没有将maxBufferPoolSize值设置为小于maxBufferSize的意义?据我理解,答案是否定的。然而,在.NET Framework的BufferManager类中,关于这些值的true explanation of these values有点底层和有点令人困惑。
奇怪的是,在大型消息测试中,我可以将“maxBufferSize”值增加到比“maxBufferPoolSize”值更大的数字,它仍然有效。我认为,如果我没有分配足够大的池(maxBufferPoolSize)来容纳最大分配的缓冲区(maxBufferSize),则会失败,但显然情况并非如此。
请问有人能解释或回答这个问题吗?谢谢!

1
我认为你的理解是正确的,从概念上讲它是没有意义的。事实上,这并不应该阻止您使用对您有意义的值。也许你可以向WCF团队询问解释? - Bernard
1个回答

3
当一条消息的生命周期结束时,我们会尝试返回用于保存消息的缓冲区。如果返回后池子中的总内存小于或等于MaxBufferPoolSize,则WCF将成功返回缓冲区。
同样,在创建/接收消息时,WCF会尝试从池中获取缓冲区,如果池中没有相应大小的缓冲区,则使用GC进行分配。在缓冲模式下,分配的最大大小受MaxReceivedMessage size限制。
您可以检查应用程序的内存使用情况,并查看GC性能计数器,您会发现GC分配和回收的时间很长,因为WCF无法对这些缓冲区进行池化。
希望这对您有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接