代码之家  ›  专栏  ›  技术社区  ›  Darko

sqlserver与stateserver的asp.net会话状态性能比较

  •  32
  • Darko  · 技术社区  · 15 年前

    我正在学习ms认证,我正在做的一个实践测试有一个问题,争论的焦点是将会话存储在sql server而不是stateserver之间的性能。

    考虑到应用程序正在Web场中运行,哪个会话状态解决方案提供了最佳性能(SQL Server或StateServer),最重要的是,为什么?

    4 回复  |  直到 9 年前
        1
  •  54
  •   Marc    15 年前

    状态服务器速度更快,因为它将会话数据存储在内存字典中。SQL Server速度较慢,因为它存储在一个将数据持久化到磁盘的数据库中。

    sql server也比较慢,因为所有内容都存储在一个表中,随着越来越多的客户端访问/更新会话数据,这会导致争用。

    SQL Server是 更可靠 因为它被持久化到磁盘,并且可以被设置为具有故障转移能力的集群。

    见序言 this article 为了一个深刻的解释。

        2
  •  14
  •   Irvin Dominin    9 年前

    有一点,但很重要的一点要注意:inproc在服务器场中不可用,顾名思义,它在当前的w3wp进程中运行,不能在服务器场中共享。stateserver是一个windows服务,所以使用stateserver的速度取决于stateserver服务运行的机器的速度,它只是内存。当然,sql需要编写数据和检索,这可能比只使用内存慢。

    here :

    • 正在进行中。进程中的性能最好,因为会话状态内存保存在asp.net进程中。对于托管在单个服务器上的Web应用程序,其中保证用户被重定向到正确的服务器的应用程序,或者当会话状态数据不是关键的(在某种意义上,它可以被重新构建或重新填充)时,这是选择的模式。
    • 进程外。当性能很重要时,最好使用此模式,但不能保证用户将从哪个服务器请求应用程序。使用进程外模式,可以获得从内存读取的性能,以及管理所有服务器状态的独立进程的可靠性。
    • SQLServer。当数据的可靠性对于应用程序的稳定性是基本的时,最好使用这种模式,因为数据库可以被聚类为失败场景。性能没有进程外快,但折衷的是更高级别的可靠性。
        3
  •  11
  •   Colin Mackay    15 年前

    从这个链接: http://www.eggheadcafe.com/articles/20021016.asp

    性能

    • inproc-速度最快,但会话数据越多,内存就越多 在web服务器上使用,并且 会影响性能。

    • stateserver—存储基本类型的数据时(例如字符串、整数、 等),在一个测试环境中是15% 比inproc慢。但是,成本 序列化/反序列化 如果您正在存储 太多了 物体的你必须自己做性能测试 脚本。

    • sqlserver-存储基本类型的数据时(例如字符串、整数、 等),在一个测试环境中是25% 比inproc慢。同样的警告 在stateserver中序列化。

    因此,state server存储会话状态的速度似乎比sqlserver快一点。

    至于原因,我建议SQL服务器应该是多用途的,而且很可能还可以用于其他方面。不仅如此,存储机制是磁盘,因为stateserver在一个单独的进程中运行,但是它只是将数据存储在另一个进程的内存空间中,而不必将其写入磁盘(允许使用虚拟内存)

        4
  •  8
  •   Morteza Jalali    9 年前