有没有办法可以确定c#中应用程序池(在IIS 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.
如果需要,不会检查应用程序变量或锁定应用程序。我会将此作为练习留给用户。