我读过,你可以直接存储类到一个会话变量即ASP.NET - 在会话变量中存储类 - 它如何工作(内存)?
Session["var"] = myclass;
我的问题是内存管理是如何工作的。它会自动将此序列化到客户端的会话中吗?
或者它是否在服务器内存中保存类的实例的数据,并且只保留会话对象中的引用?
我读过,你可以直接存储类到一个会话变量即ASP.NET - 在会话变量中存储类 - 它如何工作(内存)?
Session["var"] = myclass;
我的问题是内存管理是如何工作的。它会自动将此序列化到客户端的会话中吗?
或者它是否在服务器内存中保存类的实例的数据,并且只保留会话对象中的引用?
ASP.Net会将您的对象存储在服务器内存中的static
嵌套字典中。
然后它使用会话ID向客户端发送一个cookie。
下次客户端发送请求时,ASP.Net将从外部字典中检索与该ID关联的会话,然后为您提供包含该会话中对象的内部字典。
(这是默认的会话提供的工作方式;其他供应商可以将对象序列化到SQL Server,或做别的东西完全)
您不会在会话中存储类,而是在这些类的实例中。是的默认会话存储是内存。但是,您也可以将SQL Server用作会话存储。然后会发生一些序列化。
会话数据为而不是可在客户端使用。
这取决于你如何在ASP.NET建立会话。默认是会话驻留在服务器的内存中,基本上只是一个字典。用户被给予一个会话cookie,用于识别这些会话字典中的哪一个会抓取给定的请求(每个用户一个会话字典)
对象永远不会发送到客户端,因为客户端只有一个cookie,并且cookie太小而无法容纳任何东西,并且除了向客户端发送对象可能是安全问题。
您可以配置ASP.NET使用一个数据库,而不是内存来存储会话,也就是详细here
默认会话存储在内存中。这是最容易使用的,因为对象不一定需要可序列化。
如果您更改会话存储以允许说SQL SERVER数据库。然后,所有存储在会话中的对象都需要可序列化,否则它们将抛出异常。
您的会话默认只会持续20分钟。您可以在web.config中将其更改为只要您想要的时间。但在此之后,垃圾收集将从内存中移除它。
会话与客户端无关。 – SLaks 2011-03-31 19:28:06