ASP.NET:应用程序生命周期,静态变量

时间:2011-03-16 16:24:38

标签: asp.net static-members

我的ASP.NET网站中的一个类需要为每个请求多次访问数据库表。如果有的话,数据库表应该很少改变。也许一个月几次。

在类的静态构造函数中,表从DB中获取并缓存在静态局部变量中。每当类需要访问该表时,它只使用缓存的静态版本。

我的问题涉及这个缓存的静态版本表的生命周期。

我知道它是在第一次实例化类或者使用类中的静态方法时获取的。但是这种情况多久发生在Web服务器上?如果表更改并且我们想要重置表的静态版本该怎么办?

基本上,我想知道,这个表是一次获取的,然后每次重新启动IIS时才重新获取?什么,关于站点和IIS,将触发此静态类重置,导致静态表被重新获取?

3 个答案:

答案 0 :(得分:1)

我建议使用ASP.NET缓存本身,而不是为每个特定的缓存项目提供变量(现在只有一个表,但我确信还有增长空间);通过这种方式,您可以指定过期,例如依赖项。

您可以使用缓存here获取缓存here的相关信息。

要回答关于生命周期或局部变量期望的问题,请参阅this link,这应该比我更好地解释内部。

答案 1 :(得分:1)

为什么不将它添加到'Application'集合中而不是类的静态变量?它的生命周期很好理解(网站的生命周期),并且可以通过触摸web.config轻松回收。在Global.asax的Application_Start方法中填充它。

答案 2 :(得分:0)

  

基本上,我想知道,是这个   表只提取一次然后才提取   每次重新启动IIS时都会重新获取?

是的,你已经有了这个位置。实质上,重新启动IIS将导致您的静态变量“刷新”。如果你使用一个静态变量来存储这种东西(这可能不是最好的解决方案,但我试图直接回答你的问题而不会引起偏离),我建议你在数据层中构建一些代码,这样你的每次写入有问题的数据库表时,都会更新静态变量。这意味着每次更新服务器时都不需要反弹服务器。

还值得记住的是,静态变量在所有客户端请求中共享,这通常会导致一些不可预测的多线程错误。