OutOfMemoryException
。双方的绑定在开始时以编程方式创建一次,并包含相同的设置(见下文)。
NetTcpBinding netTcpBinding = new NetTcpBinding(SecurityMode.None);
EndpointAddress endpointAddress = new EndpointAddress(EndpoindAddress);
InstanceContext context = new InstanceContext(callbackinstance);
netTcpBinding.MaxConnections = 5;
netTcpBinding.MaxBufferSize = 2147483647;
netTcpBinding.MaxBufferPoolSize = 2147483647;
netTcpBinding.MaxReceivedMessageSize = 2147483647;
netTcpBinding.ReceiveTimeout = TimeSpan.MaxValue;
netTcpBinding.CloseTimeout = TimeSpan.MaxValue;
netTcpBinding.TransferMode = TransferMode.Buffered;
netTcpBinding.ListenBacklog = 5;
DuplexChannelFactory<ISubscription> channelFactory =
new DuplexChannelFactory<ISubscription>(
new InstanceContext(this),
netTcpBinding,
endpointAddress);
proxy = channelFactory.CreateChannel();
答案 0 :(得分:1)
嗯,它没有成倍增长,但要确保你没有杂散的引用, 特别是寻找可能引用您的迷路对象的事件和lambda•我该如何防止 刚刚成长的客户端界面 在记忆方面呈指数级增长 使用
•内存使用量是否会在 如果我发送,客户端要低得多 只有对象的通用列表 反对可序列化的词典?
我对此表示怀疑。
•我是否设置了绑定 这种配置正确 实施?
不要看到任何明显的问题
•解决此问题的任何其他建议 记忆问题会很大 赞赏。
查看Windbg,它需要时间来正确学习,但它可以帮助你看到什么引用了什么......它可能不是你所期望的
答案 1 :(得分:0)
您是否确保只有一个ServiceChannelFactory,并且尽可能早地尽快关闭WCF频道?
答案 2 :(得分:0)
将MaxBufferPoolSize最大化为2 GB(netTcpBinding.MaxBufferPoolSize = 2147483647;
)并不是明智的决定,除非你有足够的RAM。
WCF将继续累积缓冲区,您可能会收到OutOfMemoryException
。
有一个很好的解释here。