![](/img/trans.png)
[英]Static class with non-static members shared across instances of ASP.NET MVC app?
[英]static class in Asp.NET MVC app
我想知道ASP.NET MVC应用程序中的静态类是否可以多次初始化 。 我最初设计我的应用程序,以便静态组件从数据库中获取一些东西并充当缓存,我向从构造函数调用的类添加了一个刷新方法。 刷新方法也通过应用程序的管理部分提供。 在某些时候,我注意到数据已更新,无需手动触发,这意味着静态构造函数不止一次运行。
有几种情况我可以合理地看到这种情况发生,例如未处理的Exception
导致重新初始化。 但我很难复制这个,所以我想肯定。
最常见的情况是:
重新加载Web应用程序
重新加载应用程序池
app-domain将被重新加载(根据需要重新编译动态部分),这将使任何静态初始化的数据无效。
如果创建静态数据很昂贵,或者避免重新加载AppDomain,应用程序池或IIS服务器,可以通过在某处保留静态数据来解决这个问题。
更新 :Phil Haack刚刚在这里发布了相关博客文章: http : //haacked.com/archive/2011/10/16/the-dangers-of-implementing-recurring-background-tasks-in-asp-net.aspx
- Bye Bye App Domain
- 它在解释上述方面做得更好。 值得注意的是,IIS将至少29小时回收它的工作进程,并且共享的托管服务商将更频繁地回收AppDomain(可能在20分钟的空闲时间内)
- 告诉ASP.NET,“嘿,我在这里工作!”
- 概述了可以应用以获得AppDomain取消通知的技术 - 您可以使用此技术让您的Singleton实例正常运行
- 建议
我建议你看看:)
每个AppDomain初始化一次static
类。
如果IIS回收您的AppDomain,一切都将重新初始化。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.