Получите время работы пула приложений в C#
Есть ли способ, которым я могу определить, как долго пул приложений (в IIS7) был запущен (время с момента запуска или последнего перезапуска) в C#?
7 ответов
Действительно глупый трюк: в каком-то классе, который все использует, используйте конструктор класса, чтобы запомнить время запуска, и используйте страницу aspx для его получения. Теперь сравните с текущим временем.
DateTime.Now - Process.GetCurrentProcess().StartTime
Process.GetCurrentProcessInfo()
не существует
Из приложения ASP.NET вы можете попробовать TimeSpan uptime = (DateTime.Now - ProcessInfo.GetCurrentProcessInfo ().StartTime)
Исходя из вышеизложенного, я создал простой класс, например...
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); }
}
}
и вызвал его в Application_Start() в Global.asax.cs как
var temp = UptimeMonitor.UpTimeSeconds;
Затем он может быть доступен в любом месте с помощью
UptimeMonitor.UpTimeSeconds
Если вы обнаружите, что Process.GetCurrentProcessInfo() не существует, как упоминалось другим пользователем,
System.Diagnostics.Process.GetCurrentProcess().StartTime
может работать на вас.
(Я хотел добавить это как комментарий к сообщению Эрика Хамфри, но мне не разрешено)
Существует один из двух подходов, которые я лично использую. Использование статического класса (как показано в ответе @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.
При необходимости не выполняется проверка переменной приложения или блокировки приложения. Я оставлю это в качестве упражнения для пользователя.
Если вы помяли Перезапуск (Переработка) пула приложений и http://forums.iis.net/t/1162615.aspx, вы должны получить его