【问题标题】:How to get the last start time for an ASP.NET app?如何获取 ASP.NET 应用程序的最后启动时间?
【发布时间】:2011-02-14 15:44:16
【问题描述】:

如何获取当前 ASP.NET 应用程序上次启动的时间?

【问题讨论】:

    标签: .net asp.net iis datetime


    【解决方案1】:

    如果您希望放弃一个额外的变量,我认为这将为您提供上次重新启动 IIS 工作进程(又名应用程序池)的时间:

    System.Diagnostics.Process.GetCurrentProcess().StartTime
    

    我使用它来设置可缓存性,因为该页面基于我仅在应用程序启动时动态生成的内容:

    Response.Cache.SetLastModified(System.Diagnostics.Process.GetCurrentProcess().StartTime);
    

    可以在应用程序池/工作进程中停止/启动单个网站,但我从 this post 推断,这样做不会重新创建静态应用程序对象,所以我认为与工作进程关联的日期可能是这里最有用的日期。

    还要记住,在应用程序启动时创建的静态应用程序变量实际上通常会为您提供第一次访问应用程序的时间。 工作进程可能启动得更早,并且让我想起诸如“IIS 应用程序预热”和“IIS 应用程序自动启动”之类的短语以及另一个关于何时初始化静态字段的讨论。您的选择可能取决于您是否对最后一个工作进程回收时间感兴趣,或者您是否对计算其他静态成员的时间感兴趣。

    【讨论】:

    【解决方案2】:

    您可以在 Global.asax 的 Application_Start 中将静态字段设置为 DateTime.Now

    【讨论】:

      【解决方案3】:

      我猜,创建一个静态类,其中一个静态构造函数将属性分配给DateTime.Now

      【讨论】:

      • 它可能会起作用,但结果不是我所期望的。好像app用的不多,还可以回收。
      • 是的,这是真的,如果不使用应用程序将被回收,并且静态消失。下次来电时,新的应用程序将启动并初始化,因此静态将反映这个新日期
      • 您可以禁用自动回收,查看应用程序池设置。
      【解决方案4】:

      最简单的解决方案:

      public static readonly DateTime StartupTime = DateTime.Now;
      

      我强烈警告任何人不要使用System.Diagnostics.Process.GetCurrentProcess().StartTime

      当您更新应用程序文件时,ASP.NET 应用程序会在同一进程中热重新加载。 App-Domain 正在重新加载,但w3wp 进程保持不变。请记住这一点。

      【讨论】:

        猜你喜欢
        • 2011-03-12
        • 1970-01-01
        • 2013-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-24
        • 1970-01-01
        相关资源
        最近更新 更多