WCF 配置导致内存“泄漏”

<binding name=”Allscripts.Homecare.WSHTTPBinding.Configuration” closeTimeout=”00:05:00″ openTimeout=”00:05:00″ receiveTimeout=”00:10:00″ sendTimeout=”00:05:00″ maxBufferPoolSize=”2147483647″ maxReceivedMessageSize=”2147483647″>
<readerQuotas maxDepth=”2147483647″ maxStringContentLength=”2147483647″ maxArrayLength=”2147483647″ maxBytesPerRead=”2147483647″ maxNameTableCharCount=”2147483647″/>

http://kennyw.com/work/indigo/51

“在内置的 WCF 绑定和传输绑定元素上,我们将 MaxBufferPoolSize 公开为一个属性,以便您控制我们的缓存占用空间。如果您要发送小型 (< 64K) 消息,那么默认值 512K 可能是可以接受的。对于较大的消息,通常最好完全避免池化,您可以通过设置MaxBufferPoolSize=0来完成。当然,您应该在不同的值下分析您的代码,以确定最适合您的应用程序的设置。”

因此,通过将 maxBufferPoolSize 更改为 0,我能够见证我们服务工作的稳定性。当然,由于我们给它的困难,它仍然消耗一些内存,但它没有泄漏。

概括

如果您有性能问题,并尝试通过更改所有配置参数(超时、缓冲区大小、其他内容)来修复它们,请仔细执行此操作。始终评估性能影响。如果您已经遇到问题,请使用高级分析器。

令人惊讶的是,增加 WCF maxBufferPoolSize并不总是意味着性能的提高,如果消息的大小大于 64K,它可能会导致巨大的内存泄漏。对于较大的消息,最好设置 MaxBufferPoolSize=0。对我来说,听起来 GC 并不热衷于从堆中处理大对象,这导致了我们的问题。

希望这可以帮助某人。

参考:

MaxBufferPoolSize vs MaxBufferSize

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值