.net - maxBufferPoolSize 小于 maxBufferSize 有意义吗?

标签 .net wcf

使 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/

相关文章:

c# - PropertyGrid 在 UITypeEditor 或 TypeConverter 的帮助下编辑后执行操作以更改其他属性

c# - 在 WCF 服务中记录 IP 地址

wcf - 为什么在使用 .Net WCF 等 Web 服务时禁止 DTD 更安全?

c# - 如何拦截/覆盖 .net 可执行文件中的函数调用?

.net - VB.NET 可空值

c# - CollectionEditor 和 "Code generation for property ' *** *' failed"错误信息

c# - 从 Web 表单应用程序进入 Web 服务应用程序

c# - 400 错误请求将 xml 负载发送到 WCF REST 服务

c# - WCF 身份验证不起作用

c# - 使用 WebRequest 和 WebResponse 时的 session 问题