ASP.NET会话状态性能基准

ASP.NET会话状态性能基准,asp.net,sql-server,session,session-state,stateserver,Asp.net,Sql Server,Session,Session State,Stateserver,我在比较InProc、StateServer和SQLServer for ASP.NET状态管理时发现了很多有用的信息,但我似乎找不到任何性能基准比较。很明显,InProc比StateServer快,而StateServer又比SQLServer快,但不清楚快多少。我意识到,应用程序和环境会有很大的不同,但是了解它们之间的比较是很有价值的 您是否知道已经执行的任何基准测试,您可以与他人分享?或者你有过这样的亲身经历吗?谢谢大家! 我有个人经验,但没有基准或实际记录的指标可供分享。我们最初创建了一

我在比较InProc、StateServer和SQLServer for ASP.NET状态管理时发现了很多有用的信息,但我似乎找不到任何性能基准比较。很明显,InProc比StateServer快,而StateServer又比SQLServer快,但不清楚快多少。我意识到,应用程序和环境会有很大的不同,但是了解它们之间的比较是很有价值的


您是否知道已经执行的任何基准测试,您可以与他人分享?或者你有过这样的亲身经历吗?谢谢大家!

我有个人经验,但没有基准或实际记录的指标可供分享。我们最初创建了一个Asp.Net站点,它使用InProc方法在会话中存储了一个比平常更大的用户对象。我们发现,对象的大小和错误处理库的性质导致了两种不期望的行为。第一个是在进程中以随机间隔回收应用程序池。由于w3wp.exe进程会在中途自行循环,因此它实际上会转储会话,对象将丢失。这导致其他代码启动并修复会话,并且增加了事务的延迟。我们还发现(虽然这不是一个可怕的问题,我只是在尝试调试我刚才描述的内存丢失时才发现),会话中的对象的大小以及为页面本身加载到库中的一些对象会导致w3wp.exe重复地将自身分页进出。对于只涉及会话对象或这些库对象但不同时涉及两者的较小请求,进程上没有奇怪的分页行为

在从InProc迁移到StateServer的过程中,我们发现了回收的即时回报。事实上,该池的循环次数减少了,即使在循环时,我们的会话对象仍保留在单独的内存中。我们还注意到,这创建了一个通用的“仅限于库”条件,正如上面关于分页所描述的那样,我们没有再次经历过这种情况(尽管承认我在正常运行一个月后停止了检查)。当时我们确实在访问某些框架库时遇到了很小的延迟,但是当我们从2.0升级到3.5时,这些访问异常完全消失了。当我们很快从3.5升级到4.0时,我们希望能有类似的行为

尝试使用SQLServer作为状态控制器的测试站点,我们发现的唯一延迟是初始会话创建/存储。在SQL中更新/访问会话的后续调用与StateServer选项没有实际区别。我没有任何指标,但在任何一个系统上都没有表明行为上的差异。时间戳在所有方面都有可比的差异。我们确实获得了一个好处,尽管它的使用潜力很小,那就是我们能够将用户数据库直接与会话状态服务器耦合,并直接比较时间戳、状态和其他专用会话变量。我们并不真正需要这个特性,而StateServer选项已经在我们的生产服务器上如火如荼地使用了,所以我们决定让它保持原样


最后,说服我们为StateServer转储InProc的不是速度,而是内存使用。访问速度的好处肯定不会超过将数据存储在内存中的需要。

DevOps的人有一个很好的基准。 比较

  • ASP.Net在进程中的应用
  • ASP.Net会话状态服务器
  • Net Sql Server
  • 卧铺
  • 蒙哥达
  • 乌鸦
  • Redis(这个,不是这个)
AppHarbor也推荐memcached,但没有基准。
并提供会话提供程序

这太棒了。感谢您抽出时间与我们分享这段经历。听起来这一定是解决回收问题的一大难题。一旦您切换到StateServer并升级到3.5,您在使用InProc时是否有明显的延迟(当它没有回收中流时)?@Joel Beckham:最大的痛苦是运行调试诊断。他们收集大量的数据。分类是不好玩的。一旦切换到StateServer,我们就再也不回头了(尽管我们首先纠正了导致内存问题的一些问题)。比较开始和之后的时间戳数据,我们发现两者之间没有明显的差异。两者之间存在的任何延迟都必须仅在聚合或计算机级别上有效-