使maxBufferPoolSize值小于maxBufferSize是否有意义?据我了解,答案是“否”。但是,.NET Framework的BufferManager类中的true explanation of these values有点底层,有点混乱。
奇怪的是,对于大型邮件测试,我只能将“ maxBufferSize”值设置为大于“ maxBufferPoolSize”值的值,并且它可以正常工作。我会认为,如果我没有分配足够大的池(maxBufferPoolSize),则对于最大分配的缓冲区(maxBufferSize)它将失败,但是显然不是这样。
谁能解释或回答这个问题?谢谢!
最佳答案
当消息的生命期结束时,我们尝试返回用于保留的缓冲区。如果返回时池所保存的总内存为
类似地,在创建/接收消息时,WCF尝试从池中获取缓冲区,如果池中没有该大小的缓冲区,则我们使用GC进行分配。在缓冲模式下分配的最大大小由MaxReceivedMessage大小保护。
您可以检查应用程序的内存使用情况,并查看GC性能计数器,并且您会发现GC分配和收集的时间很多,因为WCF将无法合并这些缓冲区。
希望这会有所帮助。