【发布时间】:2010-12-24 12:35:18
【问题描述】:
会话变量究竟保存在哪里?饼干?服务器内存?
应用程序变量保存在哪里?
【问题讨论】:
-
这似乎不止一个问题。
-
@Chris:可能是。有关系吗?
标签: asp.net session memory session-variables
会话变量究竟保存在哪里?饼干?服务器内存?
应用程序变量保存在哪里?
【问题讨论】:
标签: asp.net session memory session-variables
放入 Session 的变量存储在配置的 SessionStateProvider 配置为存储它们的任何位置。
默认的SessionStateProvider使用所谓的进程中 (InProc) 会话,其存储位置在服务器内存中,在 ASP.NET 工作进程的内存空间内。
您可以配置自己的SessionStateProvider 以将会话变量存储在数据库中的其他位置,例如进程外。
应用程序变量存储在ApplicationState 中,它也存储在 ASP.NET 工作进程的内存空间中。与会话状态不同,应用程序状态适用于所有用户和会话。据我所知,没有将 ApplicationState 存储在其他地方的配置;如果您需要存储大量应用程序数据,那么您可能需要查看ASP.NET Caching。
【讨论】:
system.Web 程序集中的内置SqlSessionStateStore;在 Reflector、DotPeek 或类似工具中打开它,看看它是如何实现的。或者,您可以在这里了解如何实现一个 github.com/dnauck/AspSQLProvider/blob/master/src/…,它是存储在 Postgres 数据库中的 Sql Session 的实现
SessionStateProvider 将 Session 存储在任何您喜欢的地方
会话变量与应用程序变量一样存储在服务器内存和磁盘上。
ASP.NET 会话状态支持几种 会话变量的存储选项。 每个选项都被标识为 会话状态模式类型。默认 行为是存储会话变量 在 ASP.NET 的内存空间中 工作进程。但是,您也可以 指定会话状态应该是 存储在单独的进程中,在 SQL 中 服务器数据库,或自定义数据 资源。如果你不想要会话 为您的应用程序启用的状态, 您可以将会话模式设置为关闭。
【讨论】:
对于 InProc 会话,变量本地存储在 ASP.NET 工作进程的内存中。应用程序状态也是如此。
【讨论】: