Files
imsInterface/interface/asm/dotnet/ItacTools/StatisticWorker.cs
2025-06-06 09:15:13 +02:00

78 lines
3.2 KiB
C#

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using com.itac.mes.tools;
namespace com.itac.mes.tools
{
public class StatisticWorker
{
private DateTime startupTime = DateTime.Now;
private long count = 0;
// Volatile is used as hint to the compiler that this data
// member will be accessed by multiple threads.
private volatile bool _shouldStop;
private List<KeyValue> versionList;
public StatisticWorker()
{
Thread.CurrentThread.Name = "StatisticThread";
}
// This method will be called when the thread is started.
public void DoWork()
{
while (!_shouldStop)
{
Process process = Process.GetCurrentProcess();
ProcessThreadCollection threads = process.Threads;
TimeSpan upTime = DateTime.Now - startupTime;
string appName = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name;
String message = String.Format("{0} Statistics\n", appName) +
String.Format(" {0,-21}: {1}\n", "Application started", startupTime.ToLocalTime()) +
String.Format(" {0,-21}: {1}\n", "Uptime", upTime) +
String.Format(" {0,-21}: {1}\n", "MachineName", process.MachineName) +
String.Format(" {0,-21}: {1}\n", "MainModule", process.MainModule) +
String.Format(" {0,-21}: {1,9:####0\\.###} Mb\n", "PrivateMemorySize64", process.PrivateMemorySize64 / 1024) +
String.Format(" {0,-21}: {1,9:####0\\.###} Mb\n", "PeakWorkingSet64", process.PeakWorkingSet64 / 1024) +
String.Format(" {0,-21}: {1,9:####0\\.###} Mb\n", "WorkingSet64", process.WorkingSet64 / 1024) +
String.Format(" {0,-21}: {1,9:####0\\.###} Mb\n", "MinWorkingSet", process.MinWorkingSet.ToInt64() / 1024) +
String.Format(" {0,-21}: {1,9:####0\\.###} Mb\n", "MaxWorkingSet", process.MaxWorkingSet.ToInt64() / 1024) +
String.Format(" {0,-21}: {1}\n", "TotalProcessorTime", process.TotalProcessorTime) +
String.Format(" {0,-21}: {1}\n", "UserProcessorTime", process.UserProcessorTime) +
String.Format(" {0,-21}: {1}\n", "Threads", threads.Count);
// jedes 10. Mal weitere Infos ausgeben
if ((count % 10) == 0)
{
if (versionList != null)
{
foreach (KeyValue va in versionList)
{
message += String.Format(" {0,-21}: {1}\n", va.key, va.value);
}
}
}
LogHandler.log(Constants.LOGGER, TraceEventType.Information, message);
// 1 Minute schlafen
Thread.Sleep(60000);
count++;
}
}
public void RequestStop()
{
_shouldStop = true;
}
public void setVersionList(List<KeyValue> versionList)
{
this.versionList = versionList;
}
}
}