【问题标题】:Why serialization is not required for InProc session mode为什么 InProc 会话模式不需要序列化
【发布时间】:2015-08-25 09:31:39
【问题描述】:

我将state service session provider 用于我的mvc 应用程序,如果我不序列化要存储在会话中的类型,应用程序会抛出一个错误,该类必须标记为可序列化。但是,如果我切换到 InProc 会话模式,即使我的类未标记为可序列化,会话也会起作用。根据我的理解,即使在InProc 模式下,ASP.Net 在存储到会话之前对数据进行序列化,那么为什么 InProc 模式可以在不使用 Serializable 属性的情况下工作。

【问题讨论】:

    标签: c# asp.net asp.net-mvc session serialization


    【解决方案1】:

    使用 InProc 会话,数据不会“存储”在任何地方,它只是保留在内存中。这种方式不需要序列化。对于其他方法,数据确实需要写入某个地方(状态服务器、sql 服务器),并且需要转换为字节流(然后再返回)。

    因此,如果您使用 InProc 并且有很多包含大量数据的会话,您可能会耗尽服务器内存。

    【讨论】:

    • 响应是正确的,只是添加一个小注释:如果你在 InProc 时写 Session["key"] = value 这行实际上会保存 Session,但如果是 OutOfproc 它会仅将 Session 存储在一些临时文档中,实际保存将在请求处理结束时完成并通过线路发送 - 这就是序列化发生的时候。
    【解决方案2】:

    InProc 不序列化。

    In-Proc Session State Management:

    InProc 状态比状态服务器或 SQL Server 会话存储技术快得多。 SQL Server 和状态服务器将它们的缓慢归因于在从 SQL/State 服务器读取/存储 Session 数据时发生的序列化/反序列化。

    InProc Mode in ASP.NET Session State:

    序列化/反序列化是潜在的问题。 InProc 不需要复杂对象的序列化。这基本上是优势,但实际上在您最意想不到的时候可能会成为大问题。由于 InProc 允许将任何内容放入会话中,因此您最终可能会在会话中得到许多不可序列化的对象。如果您稍后需要切换到 Session State 或 SQL Server(例如,您的网站变得流行并且现在您有很多访问者),您不能因为存储的类是不可序列化的。突然之间,看似优势的东西变成了问题,您必须立即更改所有有问题的对象。

    【讨论】:

      猜你喜欢
      • 2014-08-30
      • 2011-10-06
      • 2012-04-08
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 2017-01-01
      • 2013-01-10
      • 1970-01-01
      相关资源
      最近更新 更多