让maxBufferPoolSize值小于maxBufferSize是否有意义?根据我的理解,答案是'不'。但是,.NET Framework的BufferManager类中的true explanation of these values有点低级且有点令人困惑。
奇怪的是,对于大型消息测试,我可以将'maxBufferSize'值增加到比'maxBufferPoolSize'值更大的数字并且它可以工作。我想如果我没有分配足够大的池(maxBufferPoolSize),对于最大的分配缓冲区(maxBufferSize),它会失败,但显然情况并非如此。
有人可以解释或回答这个问题吗?谢谢!
答案 0 :(得分:3)
当消息的生命完成时,我们尝试返回用于保存的缓冲区。如果返回池保留的总内存为< = MaxBufferPoolSize,则WCF将成功返回缓冲区。
类似地,在创建/接收消息时,WCF尝试从池中获取缓冲区,如果池没有该大小的缓冲区,则使用GC进行分配。在缓冲模式下分配的最大大小由MaxReceivedMessage大小保护。
您可以检查应用程序的内存使用情况并查看GC性能计数器,您会发现GC分配和收集会有很多时间,因为WCF无法汇集这些缓冲区。
希望这有用。