• WCF实例上下文模式与并发模式对性能的影响


    实例上下文模式

    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 无、可靠会话、(安全会话)
  • 相关阅读:
    linux 软件 手动添加至桌面或启动栏
    memcached 技术支持
    linux mint & ubuntu 安装QQ国际版
    2014总结
    http response 过长 导致Connection reset
    Python高质量缩放切图,抗锯齿
    eclipse使用Maven插件创建一个web project
    springMVC or response redirect https
    使用SharedPreference保存一些简单的信息
    手机的sd卡的写入和读取数据的方
  • 原文地址:https://www.cnblogs.com/wangchuang/p/5853333.html
Copyright © 2020-2023  润新知