在双工模式下运行WCF的服务有一个相当大的问题。 它泄漏内存(不是很多,但它大约80MB一天),并有一个内存分析器与服务一起运行24小时后,我发现大部分内存坐在byte[]
引用相当混乱,但我最引用结尾的东西这样的: 和“根”是这样的: 服务器上的WCF(双工)内存泄漏
我也看到很多ServiceChannel
(约200),从回调正在添加的通道(我认为)。
我确信我只保留每个连接的客户端中的一个。
总体而言,我的问题似乎几乎与此相同:memory leak in silverlight Wcf implementation但在服务器端。
我甚至试过[MTAThread]
这里提到的东西:WCF service leaks handles and memory when a client times out但它只是不解决问题。
我只是不认为这个问题与我的代码,因为我包装回调通道后得到它与OperationContext.Current.GetCallbackChannel<IServiceConnectorCallback>()
在我自己的对象之一,这些不泄漏(只有一个这些每个客户端在任何给定的快照内存) - 确保我重置这些回调多次,因为通道可能会改变(客户端丢失连接或重新连接),但我没有办法处理旧的引用,所以我只放弃它们和GC应该在他们身上做这件事。
我在我的服务上使用PerCall
,所以我根本没有任何处理我代码中的对象。
我真的有如何我可以重新启动该服务,每隔几天一边处理这种毫无头绪 - 一个解决方案,我不想现在就probose :(
所以,请在给我一些帮助/提示这 - 非常感谢你
如果客户端故障很多,你有看到更高的内存增益,你必须重新创建回调通道?如果客户已经离开,你是否放弃了回拨通道? – 2012-02-21 07:28:17
我很难说,但这可能是这样的 - 不,我不会中止服务器上的通道(我怎么能这样做 - 使用'GetCallbackChannel'我只得到'T' - 你是否必须施放这到某种代理?) –
Carsten
2012-02-21 07:31:30
你应该能够将其转换为'IClientChannel' – 2012-02-21 08:22:08