WCF命名管道服务设置

时间:2010-02-18 10:03:39

标签: wcf multithreading named-pipes

使用ConcurrencyMode.Multiple和I​​nstanceContextMode.Single属性设置服务是否值得在使用命名管道时保存一些性能?

我的意思是当我这样做时,我不得不为多线程问题烦恼。

2 个答案:

答案 0 :(得分:3)

值得吗?这取决于您对性能增益的重视程度,与实施的难度相比。

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

与演出一样,您必须衡量

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

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

但是,您没有编写WCF服务的应用程序类型,因此它可能会对您的情况产生影响。

答案 1 :(得分:3)

我自动将ConcurrencyMode.Multiple用于我的WCF服务,因为我通常希望服务能够同时处理多个请求。对我而言,这似乎是服务最直观的行为(即:如果我调用了一个Web服务并且在我参加之前必须等待来自其他用户的10个未完成请求,那就太奇怪了。)

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

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

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