WCF命名管道服务设置

问题描述:

值得使用ConcurrencyMode.Multiple和I​​nstanceContextMode.Single属性来设置服务以保存使用命名管道时的一些性能吗?WCF命名管道服务设置

我的意思是当我这样做时,我必须打扰多线程问题。

我自动为我的WCF服务使用ConcurrencyMode.Multiple,因为我通常希望服务能够同时处理多个请求。对我而言,这似乎是一种服务最直观的行为(即:如果我打电话给Web服务,并且必须等待来自其他用户的10个未完成请求才会被处理),这很奇怪。

使用ConcurrencyMode.Single强制服务一次处理单个请求(如果发生多个请求,它们将排队)。这可能会降低请求速度。

但这取决于每个请求的作用。简单的数学计算或字符串操作将变得如此之快以至于WCF的开销将成为您的主要瓶颈。如果您的服务查询或修改某种数据库,那么执行数据库操作的时间可能会成为您的瓶颈。但是,如果数据库很小,或者您只希望少数客户端,那么您可能永远都不会注意到其中的差异。如果您从5个Web服务提取数据并执行一些复杂的合并操作,这可能是一个问题。

除非您知道您会有多个同时发生的请求,否则请使用ConcurrencyMode.Single运行,直到无法满足某种客观性能标准。然后,您需要执行通常的基准测试,以确定您的服务中哪些部分最慢。加快速度。如果发生ConcurrencyMode.Single是慢速位,请改为多个!

它值得吗?这取决于你对性能增益的重视程度,相比之下它的实现有多困难。

性能增益有多好?这取决于应用程序。只有你可以通过测量来回答这个问题。

一如既往的性能,你必须措施

如果它已经够快了,不要打扰。

如果速度不够快,请测量应用程序花费的时间。在大多数涉及进程外资源访问(如数据库访问)的应用程序中,瓶颈在这里,而不是在WCF服务的InstanceContextMode中。

但是,您不写什么样的应用程序是您的WCF服务,所以它可能会在您的情况有所不同。

+0

此应用尚未完成。它处于早期发展阶段。 “你的WCF服务是什么类型的应用程序”是什么意思? – user137348

+2

我的意思是说,现在你的问题已经存在,你的服务可以做任何事情,因为你没有描述它应该做什么。它可以访问数据库,提供计算密集型服务或者提供简单的通信中继服务。性能特征将受到它需要做的事情的影响。 –