2012-02-21 82 views
6

在双工模式下运行WCF的服务有一个相当大的问题。 它泄漏内存(不是很多,但它大约80MB一天),并有一个内存分析器与服务一起运行24小时后,我发现大部分内存坐在byte[]引用相当混乱,但我最引用结尾的东西这样的: one path holding the byte[] - array 和“根”是这样的: root服务器上的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 :(

所以,请在给我一些帮助/提示这 - 非常感谢你

+0

如果客户端故障很多,你有看到更高的内存增益,你必须重新创建回调通道?如果客户已经离开,你是否放弃了回拨通道? – 2012-02-21 07:28:17

+0

我很难说,但这可能是这样的 - 不,我不会中止服务器上的通道(我怎么能这样做 - 使用'GetCallbackChannel '我只得到'T' - 你是否必须施放这到某种代理?) – Carsten 2012-02-21 07:31:30

+1

你应该能够将其转换为'IClientChannel' – 2012-02-21 08:22:08

回答

7

当基于会话通道故障,以Close通话将抛出一个异常然而,有没有在这种情况下,清理,这些只是清理,当你Abort代理端资源!故障通道

确保当您更换故障您的Abort旧的第一个

+0

非常感谢你! – Carsten 2012-02-24 08:47:34