【发布时间】:2011-08-17 13:09:21
【问题描述】:
当我在 asp.net 应用程序中设置会话时,我想知道它的存储位置。它会消耗 RAM 或硬盘空间吗?
实际上,我将数据表保存到会话变量中。我将它保存到会话中,因为数据表的计算需要很长时间。为了不再计算数据表,我从会话中获取它。
但我很好奇数据表何时会比现在大得多。它会卡住国际空间站吗?
谢谢
【问题讨论】:
-
取决于您使用的会话状态模式
当我在 asp.net 应用程序中设置会话时,我想知道它的存储位置。它会消耗 RAM 或硬盘空间吗?
实际上,我将数据表保存到会话变量中。我将它保存到会话中,因为数据表的计算需要很长时间。为了不再计算数据表,我从会话中获取它。
但我很好奇数据表何时会比现在大得多。它会卡住国际空间站吗?
谢谢
【问题讨论】:
ASP.NET 中的会话状态默认存储在进程内存(即 RAM)中。
您可以在 web.config 中通过更改 configuration/system.web/sessionState 元素的值来更改此设置:
<configuration>
<system.web>
<sessionState mode="...">
</system.web>
</configuration>
可用的选项有:
【讨论】:
根据您在 Web.Config 中配置 Session 的方式,可以将 Session 存储在 In-Memory、Asp.NET State Server、Sql Server 中。
默认情况下,会话存储在内存中,即 Ram。如果数据表变大并且有许多并发用户,您可能会遇到异常。取决于有多少用户同时访问系统,系统上的 Ram 是什么等。
【讨论】:
会话状态可以存储在您可以选择的不同位置。这是good explanation on MSDN 默认值在您运行 Web 应用程序的服务器上的内存中,因此如果您的会话变得太大,您确实会遇到内存/分页问题。
但为什么是会话?数据表中的数据是用户特定的吗?否则缓存会更合适。
【讨论】:
如果您使用InProc 会话,那么它将存储在内存中。因此,如果您有足够的内存,它将在内存中。一旦达到极限,就期待它分页到磁盘。
您还可以使用 SQL Server 等进程外会话存储。这可以在 web.config 中进行配置。请注意,您需要为其配置一个数据库。您还可以查看 MSDN 至 read up 的存储类型。
上面的旧链接,但仍然部分有用。再快速浏览一下,我发现a better link 更详细。
【讨论】:
典型的 InProc 会话状态存储在 Web 服务器的内存中。
【讨论】: