【问题标题】:Can you combine the best of inProc and Session State?你能结合最好的 inProc 和 Session State 吗?
【发布时间】:2023-04-06 13:15:01
【问题描述】:

有没有办法在 95% 的时间内使用 IIS inProc 方案,同时维护和更新会话状态变量?

理想情况下,如果有一个应用程序池回收它会刷新会话状态服务中的 inProc 数据,我会这样做。

使用 InProc 和 Session State 之间大约有 200 毫秒的差异,所以如果这完全可能,它会真正加快程序的速度。否则,稳定性问题让我不得不使用 Session State。

【问题讨论】:

  • Session State 将其数据存储在哪里?
  • 是窗口的会话状态服务。也很可能在内存中,但在不同的过程中。它还必须在每次调用时序列化/反序列化。因此,如果我只能在必要时进行反序列化,那将大大提高性能。

标签: c# asp.net .net asp.net-mvc iis


【解决方案1】:

如果我理解正确,您大部分时间都想使用 InProc,有时还想使用 StateServer。 正如你所说的“95% 的时间”,看起来你需要一些定制的东西。

所以也许你应该implement a session state store provider。您可以使用InProc mode source code 作为起点。你也有StateServer provider here的源代码。

这种方法的问题是这两个类都是internal sealed,所以你不能真正轻松地访问它们。你可以重用他们的源代码,或者用反射调用它们,或者使用表达式 lambdas 生成一个方法......我认为那里没有完美的解决方案。

另一种解决方案是从头开始重建一个 100% 满足您需求的会话状态存储,但这会更加复杂且容易出错。

【讨论】:

    【解决方案2】:

    我最终使用的解决方案是使用具有缓存部分的 HttpContextBase。

    这缓存在应用程序池的内存中。所有用户都可以访问它,这实际上非常适合我的应用程序。

    例子:

    HttpContextBase httpContext;
          CacheObject  NCO = (CacheObject)httpContext.Cache["CacheName"];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 2013-07-05
      • 2017-03-28
      • 1970-01-01
      相关资源
      最近更新 更多