博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF实例上下文模式与并发模式对性能的影响
阅读量:6371 次
发布时间:2019-06-23

本文共 2089 字,大约阅读时间需要 6 分钟。

实例上下文模式

InstanceContextMode 控制在响应客户端调用时,如何分配服务实例。InstanceContextMode 可以设置为以下值:

•Single – 为所有客户端调用分配一个服务实例。

•PerCall – 为每个客户端调用分配一个服务实例。

•PerSession – 为每个客户端会话分配一个服务实例。

InstanceContextMode 的默认设置为 PerSession

并发模式

ConcurrencyMode 控制一次允许多少个线程进入服务。ConcurrencyMode 可以设置为以下值之一:

•Single – 一次可以有一个线程进入服务。

•Reentrant – 一次可以有一个线程进入服务,但允许回调。

•Multiple – 一次可以有多个线程进入服务。

ConcurrencyMode 的默认设置为 Single。

 

实例上下文模式、并发模式和性能

InstanceContextMode 和 ConcurrencyMode 设置可以相互影响,因此了解它们如何影响性能时,必须同时查看这两个设置。例如,将 InstanceContextMode 设置为 PerCall 时,会忽略 ConcurrencyMode 设置。这是因为,每个客户端调用都将路由到新的服务实例,因此一次只会有一个线程在服务实例中运行。将 InstanceContextMode 设置为 Single 时,仅创建一个服务实例,因此 ConcurrencyMode 会影响应用程序的吞吐量。

将 InstanceContextMode 设置为 Single 的原因很多,其中包括:

  1. 创建服务实例需要大量的处理工作。当多个客户端访问服务时,仅允许创建一个服务实例可以降低所需处理量。
  2. 一个服务实例可以创建多个对象。将 ConcurrencyMode 设置为 Single 可以降低垃圾回收成本,因为不必为每个调用创建和销毁服务创建的对象。
  3. 通过将 ConcurrencyMode 设置为 Single,可以在多个客户端之间共享服务实例。

如果 ConcurrencyMode 和 InstanceContextMode 均设置为 Single,则一次只允许一个客户端调用通过。如果有大量客户端,这可能会导致较大的瓶颈。

将 InstanceContextMode 设置为 Single 并将 ConcurrencyMode 设置为 Reentrant 的性能特征与将ConcurrencyMode 设置为 Single 时相同。这是因为,一次仅允许一个客户端线程进入服务。

InstanceContextMode 设置为 PerCall 时,将为每个客户端调用创建一个新服务实例上下文(默认情况下,这表示一个新服务实例),并在客户端调用完成时销毁该实例。由于服务实例仅在进行调用时可 用,因此在调用完成时,会释放它们可能访问的所有资源。由于为每个调用分配一个新服务实例,因此会产生一些开销。但是,由于每个客户端都获取自己的服务实 例,因此不存在同步问题。当大量客户端调用同时发生时,将创建大量的服务实例。遇此情形时,务必使服务实例仅分配其正常工作所需的那些资源。

如果 ConcurrencyMode 设置为 Multiple,则多个客户端调用可以通过,但开发人员需负责手动同步对共享数据的所有访问。这意味着,一次只有一个线程可以访问共享数据,从而导致访问共享数据的所有调用顺序排队等候。这违背了将 ConcurrencyMode 设置为 Multiple 的初衷。

在 InstanceContextMode 设置为 PerCall 时,ConcurrencyMode 设置对吞吐量没有影响。每个客户端调用都获取自己的服务实例,因此每个服务实例只有一个调用到其中的线程。在 InstanceContextMode 设置为 PerSession 时,每个会话都获取自己的服务实例。有关 会话的更多信息,请参见(可能为英文网页)。使用 PerSession 时,必须使用支持会话的绑定。下表显示系统提供的哪些绑定支持会话。默认会话设置括在圆括号中。

 

绑定 会话(默认)
BasicHttpBinding (无)
WSHttpBinding 无、可靠会话、(安全会话)
WSDualHttpBinding (可靠会话)、安全会话
WSFederationHttpBinding (无)、可靠会话、安全会话
NetTcpBinding (传输)、可靠会话、安全会话
NetNamedPipeBinding 无、(传输)
NetMsmqBinding (无)、传输
NetPeerTcpBinding (无)
MsmqIntegrationBinding (无)
BasicHttpContextBinding (无)
NetTcpContextBinding (传输)、可靠会话、安全会话
WSHttpContextBinding 无、可靠会话、(安全会话)

转载地址:http://gquqa.baihongyu.com/

你可能感兴趣的文章
基于Centos6.6(7.2)源码安装Ansible
查看>>
php分页常用方法两种举例.
查看>>
基于LVM快照实现Mysql的备份还原
查看>>
Python 数据类型
查看>>
nodejs压缩css及js工具
查看>>
servlet与jsp的作用域对象使用
查看>>
MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建
查看>>
Oracle 11g安装过程中错误解决
查看>>
canto配置(1)——添加feeds
查看>>
JavaScript强化教程——jQuery AJAX 实例
查看>>
linux下配置tomcat
查看>>
HTML5 canvas实现一个简易画板
查看>>
ThinkPHP5无限循环输出无限分类【方案三】
查看>>
实易科技2012年智能DNS领域取得多项突破性进展
查看>>
Discuz安装时候出现乱码 -- 问题解决方法
查看>>
Maven——学习(1):基础概念
查看>>
Java中HashMap,LinkedHashMap,TreeMap的区别
查看>>
iPhone消息推送机制实现与探讨(转)
查看>>
iphone 线程 NSCondition NSThread
查看>>
Debian8添加kali源并安装metasploit
查看>>