【发布时间】:2009-10-22 20:15:09
【问题描述】:
我有一个具有以下设置的 WCF 服务:
- NetNamedPipeBinding
- ConcurrencyMode.Multiple
- InstanceContextMode.Single
现在我有一个以多线程方式访问此 WCF 服务的客户端。
据我了解,我必须为每个线程打开一个到服务的新连接,以避免线程相互阻塞。
- 在这种情况下,
Open()调用的成本是多少(服务在同一台计算机上)? - 我应该缓存/池化我的客户端类吗? (派生自
ClientBase)还是 WCF 是否为类似于 SQLConnection Pooling 的连接提供透明池?
【问题讨论】:
-
对于这样的场景,NetNamedPipe 机器上的通信,我不认为 ConcurrencyMode.Multiple 增加的复杂性是一个好处。这只会使您的服务代码更加复杂和容易出错......与在客户端代理创建中节省的几纳秒相比,我不知道这是否值得麻烦和可能的维护麻烦......跨度>
-
如果没有多重它就不能作为多线程工作,这意味着客户端中的多线程将毫无意义,因为它会相互等待。这不是一个毫秒的调用,它需要几秒钟。还是我错过了什么。
标签: .net wcf performance multithreading caching