使 maxBufferPoolSize 值小于 maxBufferSize 是否有意义?根据我的理解,答案是“否”。然而true explanation of these values来自 .NET Framework 的 BufferManager 类有点低级和有点困惑。
奇怪的是对于大型消息测试,我可以将“maxBufferSize”值提高到比“maxBufferPoolSize”值更大的数字,并且它可以工作。我想如果我没有分配足够大的池 (maxBufferPoolSize),对于最大的分配缓冲区 (maxBufferSize),它会失败,但显然情况并非如此。
任何人都可以解释或回答这个吗?谢谢!
最佳答案
当消息的生命周期结束时,我们尝试返回用于保存的缓冲区。如果池在返回时持有的总内存小于等于 MaxBufferPoolSize,WCF 将成功返回缓冲区。
类似地,在创建/接收消息时,WCF 尝试从池中获取缓冲区,如果池没有该大小的缓冲区,则我们使用 GC 进行分配。缓冲模式下分配的最大大小由 MaxReceivedMessage 大小保护。
您可以检查应用程序的内存使用情况并查看 GC 性能计数器,您会发现 GC 分配和收集将花费大量时间,因为 WCF 将无法池化这些缓冲区。
希望这是有帮助的。
关于.net - maxBufferPoolSize 小于 maxBufferSize 有意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6442125/