2010-02-12 51 views
3

我们有一项作为Windows服务托管的服务。 netTcpBinding与消息安全类型没有可靠的会话。客户端CPU停止服务时几乎100%

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

现在,如果我停止服务器,然后CPU跳起来。这会消耗CPU的工作线程的代码执行的

void System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32, NativeOverlapped *) 

的当我处理所有代理的客户端应用程序占用CPU变得没有。我需要知道我们如何解决WCF上的这个问题。

回答

0

一个问题是你为什么要在客户端上收集代理的单个wcf服务。假设你有20个代理服务器,WCF服务实例化为每会话那么它会在你的服务器上创建20个服务实例,每个实例都有内存分配给它。如果你有每个呼叫(这是默认),那么你将有更多的实例。不要让代理列表重用一个代理。

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

除非你不关闭代理服务器上它们各自的实例将不会被释放。尝试实例化Singleton。