【问题标题】:WCF Performance: Can I create a pool of my objects like ConnectionPooling doesWCF 性能:我可以像 ConnectionPooling 那样创建对象池吗
【发布时间】:2011-01-10 14:15:28
【问题描述】:

我有一个使用相当昂贵的对象来创建的服务。我想提高每次调用的性能。

当我删除对象并运行负载测试时,例如我每秒可以执行多少次调用,不同情况之间的性能差异很大。

情况 1. 我删除了昂贵的对象:每秒调用次数 ~= 130。 情况 2。我正常使用它,对象:速率是每秒 ~= 2。

我有一个托管在 IIS 2008 服务器上的 .NET WCF 服务。

我想知道是否有一种方法可以创建对象缓存/池并将这些对象交给服务的每次调用。

任何可能有助于这种情况的想法/cmets?

【问题讨论】:

    标签: wcf performance object pool


    【解决方案1】:

    您可以在每个会话模式下运行 WCF 服务并使用单例模式创建对象,这样您每个会话只创建一次对象,而不是每次调用一次。

    您还可以使用企业库缓存来缓存对象。

    【讨论】:

    • 将对昂贵对象(在本例中为 Castle 动态代理)的访问更改为静态引用解决了该问题。
    【解决方案2】:

    如果昂贵的部分是构建对象的状态,并且您只想限制创建该对象的次数,我建议使用持久服务。

    Durable WCF 组件在调用之间和客户端之间保持其状态。每次调用方法时,它都会将其状态写入持久性存储(默认为 sql server 数据库)。问题是你必须在调用你的 Durable 组件的人之间传递一个上下文标记。该令牌可以保存在文件或数据库或其他任何东西中。

    这将允许您对组件进行调用,它可以创建其状态一次,然后您可以继续从其他客户端调用它,只要它们有权访问其上下文令牌。

    由于每次客户端关闭时对象都会消失,因此内存中没有任何内容存在,但状态仍然存在。

    这是tutorial

    【讨论】:

      猜你喜欢
      • 2012-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 1970-01-01
      • 2010-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多