C# 你能将inProc和sessionstate的优点结合起来吗?

C# 你能将inProc和sessionstate的优点结合起来吗?,c#,asp.net,.net,asp.net-mvc,iis,C#,Asp.net,.net,Asp.net Mvc,Iis,在维护和更新会话状态变量的同时,是否有方法在95%的时间内使用IIS inProc方案 理想情况下,如果有一个应用程序池回收,我希望它能够从会话状态服务中刷新inProc数据 使用InProc和Session State之间有大约200毫秒的差异,因此如果这是可能的话,它将真正加快程序的速度。否则,出于稳定性考虑,我不得不使用会话状态。如果我理解正确,您大部分时间都希望使用InProc,有时则希望使用StateServer。 正如你所说的“95%的时间”,看起来你需要一些定制的东西 所以也许你应

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

理想情况下,如果有一个应用程序池回收,我希望它能够从会话状态服务中刷新inProc数据


使用InProc和Session State之间有大约200毫秒的差异,因此如果这是可能的话,它将真正加快程序的速度。否则,出于稳定性考虑,我不得不使用会话状态。

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

所以也许你应该。您可以使用作为起点。您还拥有的源代码

这种方法的问题在于,这两个类都是内部密封的,因此您无法轻松访问它们。您可以重用它们的源代码,或者使用反射调用它们,或者使用表达式lambdas生成一个方法。。。我认为没有一个完美的解决方案


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

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

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

例如:

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

会话状态在哪里存储数据?它是窗口的会话状态服务。在记忆中也是如此,但在一个不同的过程中。它还必须在每次调用时序列化/反序列化。因此,如果我只能在必要时反序列化,它将大大提高性能。