C# 在WCF中处理客户端上的故障服务通道

C# 在WCF中处理客户端上的故障服务通道,c#,.net,wcf,C#,.net,Wcf,我有一个WCF Websocket客户端-服务器通信。在客户端,我想做的是,如果服务器关闭或其他情况,继续尝试重新连接到服务器。据我所知,一旦服务器关闭,通道将处于故障状态,因此我无法再次使用它。我需要创建一个新的,但我担心我的解决方案中存在内存泄漏: 创建websocket服务: InstanceContext context = new InstanceContext(this); ServiceReference.SomeServiceClient client = new Service

我有一个WCF Websocket客户端-服务器通信。在客户端,我想做的是,如果服务器关闭或其他情况,继续尝试重新连接到服务器。据我所知,一旦服务器关闭,通道将处于故障状态,因此我无法再次使用它。我需要创建一个新的,但我担心我的解决方案中存在内存泄漏:

创建websocket服务:

InstanceContext context = new InstanceContext(this);
ServiceReference.SomeServiceClient client = new ServiceReference.MLogDbServiceClient(context); 
重新连接:

client.Abort();
client = new ServiceReference.MLogDbServiceClient(context);
在Windows任务管理器中,我看到我的应用程序在两分钟内从29mb增长到48mb,而我一直在保持每20毫秒创建一个新通道(这只是为了内存泄漏测试)。有人能给我一个无泄漏的解决方案吗?
我的客户机应用程序需要继续重新连接到服务器(虽然不是很频繁,但仍然如此)。问候

仅仅因为您的内存使用量增加并不意味着您正在泄漏资源。你做垃圾收集了吗?Visual Studio诊断工具显示了更多信息,可以帮助您确定是否确实在泄漏资源。不,我没有运行垃圾收集。但据我所知,这是不推荐的。我应该等GC把事情清理干净吗?如何确定VisualStudio中的内存泄漏?我知道进程内存图,但它也在缓慢增加。你是对的,不建议手动运行GC,这只是一个问题,看看它是否释放了部分/全部内存。如果确实如此,那么您不需要再次手动运行它,而只需等待GC清理。我认为您遵循了正确的模式,我唯一的建议是,如果
ServiceClient
实现了
IDisposable
,那么您应该在
Abort
之后调用
Dispose
,我刚刚检查了它在GC中的行为-一些内存被释放,但不是全部。应用程序仍在增长,但速度相当慢。我认为根本没有泄漏。我将频率从20毫秒改为200毫秒,应用程序停止增长。出于某种原因,20毫秒太快了。感谢您的帮助:)