繁体   English   中英

Asp.NET MVC应用程序中的静态类

[英]static class in Asp.NET MVC app

我想知道ASP.NET MVC应用程序中的静态类是否可以多次初始化 我最初设计我的应用程序,以便静态组件从数据库中获取一些东西并充当缓存,我向从构造函数调用的类添加了一个刷新方法。 刷新方法也通过应用程序的管理部分提供。 在某些时候,我注意到数据已更新,无需手动触发,这意味着静态构造函数不止一次运行。

有几种情况我可以合理地看到这种情况发生,例如未处理的Exception导致重新初始化。 但我很难复制这个,所以我想肯定。

最常见的情况是:

  • 重新加载Web应用程序

    • 触摸了Web.config
    • 感动二进制文件
    • 异常终止(内存不足,权限错误)
  • 重新加载应用程序池

  • 重启IIS
  • 重启w3wp.exe(至少29小时一次!)

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM