获取应用程序池的正常运行时间

时间:2009-11-23 16:01:15

标签: c# iis-7 application-pool

有没有办法可以确定c#中应用程序池(在IIS 7中)已启动多长时间(自上次重启以来的时间)?

7 个答案:

答案 0 :(得分:8)

DateTime.Now - Process.GetCurrentProcess().StartTime

Process.GetCurrentProcessInfo()不存在。

答案 1 :(得分:5)

真的很愚蠢的伎俩:在一些所有人都使用的类中,使用类构造函数来记住你的开始时间并使用aspx页面来接收它。现在与当前时间进行比较。

答案 2 :(得分:3)

从ASP.NET应用程序中,您可以尝试TimeSpan uptime = (DateTime.Now - ProcessInfo.GetCurrentProcessInfo ().StartTime)

答案 3 :(得分:2)

如果您发现Process.GetCurrentProcessInfo()不像其他用户提到的那样存在,

System.Diagnostics.Process.GetCurrentProcess().StartTime

可能适合你。

(我想将此作为评论添加到Eric Humphrey的帖子中,但我不允许)

答案 4 :(得分:1)

基于上面我创建了一个简单的类,如此..

public static class UptimeMonitor
{
    static DateTime StartTime { get; set; }

    static UptimeMonitor()
    {
        StartTime = DateTime.Now;
    }

    public static int UpTimeSeconds
    {
        get { return (int)Math.Round((DateTime.Now - StartTime).TotalSeconds,0); }
    }
}

并在Global.asax.cs中的Application_Start()中调用它,如

var temp = UptimeMonitor.UpTimeSeconds;

然后可以使用

在任何地方访问它
UptimeMonitor.UpTimeSeconds

答案 5 :(得分:0)

答案 6 :(得分:0)

我个人使用的两种方法之一。使用静态类(如@ Original10的答案中所示)或使用Application变量。

我发现使用Application变量是可以接受的,因为我注意到Process.GetCurrentProcess()能够在应用程序重启后幸存(例如修改web.config或bin目录)。我需要的东西可以满足网站重启以及

在Global.asax中,将以下内容添加到

public void Application_Start(Object sender, EventArgs e)
{
  ...
  Application["ApplicationStartTime"] = DateTime.Now.ToString("o");
}

在您需要的代码中,您可以执行以下操作:

var appStartTime = DateTime.MinValue;
var appStartTimeValue = Web.HttpCurrent.Application["ApplicationStartTime"].ToString();

DateTime.TryParseExact(appStartTimeValue, "o", null, Globalization.DateTimeStyles.None, Out appStartTime);
var uptime = (DateTime.Now - appStartTime).TotalSeconds

var lsOutput = $"Application has been running since {appStartTime:o} - {uptime:n0} seconds."

这会产生类似

的内容
Application has been running since 2018-02-16T10:00:56.4370974+00:00 - 10,166 seconds.

如果需要,不会检查应用程序变量或锁定应用程序。我会将此作为练习留给用户。