停止服务时客户端CPU几乎达到100%

时间:2010-02-12 22:31:09

标签: wcf winapi windows-services

我们有一项托管为Windows服务的服务。 netTcpBinding具有消息安全类型,没有可靠的会话。

在客户端,我们将一个代理集合缓存在列表中作为通道创建和dispose是昂贵的操作。我的客户端正在连接服务器并从服务器获取数据。

现在,如果我停止服务器,那么CPU会跳起来。消耗CPU的工作线程用于

的代码执行
void System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32, NativeOverlapped *)

当我处置所有代理时,客户端应用程序的CPU消耗将变为无。我需要知道如何在WCF上解决这个问题。

1 个答案:

答案 0 :(得分:0)

一个问题是为什么你在单个wcf服务的客户端上有代理集合。假设您有20个代理并且WCF服务实例是每个会话然后它将在您的服务器上创建20个服务实例,每个实例都分配了内存。如果您正在进行每次通话(默认情况下),那么您将拥有更多实例。代替列表代理不能重用一个代理。

我想当你停止服务时,cpu必须在短时间内清理(垃圾收集)过多的服务实例,因此它会跳转。

除非你不关闭代理,否则他们各自的服务器实例都不会被释放。尝试进行实例化Singleton。