2011-09-26 53 views
0

我创建了一个网站,主要用于报告多个位置和电子邮件报告等事情。由于它处理了大量的信息,所以我一次性设置了一堆信息,然后通过linq进行处理并过滤它,但是我需要。当有人实际点击注销按钮时,变量将被释放并清理。一旦会话超时,服务器上的内存变量

我的问题是如果用户从未真正点击注销并让会话超时或x离开他们正在使用的Web浏览器,那么这些变量会发生什么?

如果变量没有发布,人们通常会如何处理这些变量?

谢谢, 迈克

+1

是你说这个数据存储在会话状态?如果是这样,你有没有考虑过使用应用程序状态或缓存呢? –

+0

当一个浏览器用于登录多个不同“客户”的网站时,我对缓存的熟悉程度不够,导致了奇怪的行为。截至目前,所有缓存都是禁用的,我相信我基本上在会话中存储了一个数字,该数字指向一个数组变量,该数组变量为持有会话中“拥有”指针的用户的信息。跟踪谁是谁并不是一个很好的方法。绝对不是最好的方法,但是在我对认证方法进行大量研究并改变它之前,我写了它,这将是一件非常头疼的事情。 –

+0

以任何方式用户特定的信息,还是所有用户都使用相同的结果集? –

回答

1

您描述的方式听起来像是最好的解决方案是将数据存储在缓存中,以便您可以随时参考。

下面是如何缓存DataSet对象一个简单的例子:一旦数据被存储在高速缓存

DataSet ds = RetrieveLotsOfData(); 
Cache["MyDataSet"] = ds; 

,你可以在任何地方像这样引用它:

DataSet ds = (DataSet)Cache["MyDataSet"]; 

请参阅本文有关ASP.NET中缓存管理的概述:

http://www.codeproject.com/KB/web-cache/cachemanagementinaspnet.aspx

+0

[缓存概述](http://www.codeproject.com/KB/web-cache/cachemanagementinaspnet.aspx) - 发现这也有帮助。 –

+1

@Mike_OBrien:谢谢。我已更新我的答案,以包含您提供的链接。它也可能在未来帮助其他人。 –

1

如果您的会话超时(它最终会),那么你的服务器会释放它的参考Session对象持有的引用,你在SessionState存储的对象。当对象没有引用时,它会在垃圾收集器运行时自动收集垃圾。顺便说一句,如果你的用户点击logout它并不意味着对象立即被清除,而只是对象可用于垃圾收集。这样你就不确定何时会收集它们,但是这允许垃圾收集过程只在需要时运行,并且当你的应用程序没有承受重负时做一些额外的清理。