124 lines
3.6 KiB
C#
124 lines
3.6 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace MP.Data.Services
|
|
{
|
|
/// <summary>
|
|
/// Gestore statistiche esecuzione processi x analisi timing
|
|
/// </summary>
|
|
public class ExecStatsCollector : IDisposable
|
|
{
|
|
#region Public Methods
|
|
|
|
public void Dispose()
|
|
{
|
|
TrackData.Clear();
|
|
}
|
|
|
|
/// <summary>
|
|
/// restituisce una stringa da poter emettere in log con il summary degli eventi tracciati ed eventuale reset...
|
|
/// </summary>
|
|
/// <param name="CallName"></param>
|
|
/// <param name="resetCount"></param>
|
|
/// <returns></returns>
|
|
public string GetCallSum(string CallName, bool resetCount)
|
|
{
|
|
string answ = "";
|
|
if (TrackData.ContainsKey(CallName))
|
|
{
|
|
var reqRec = TrackData[CallName];
|
|
answ = $"{CallName} | {reqRec.NumCall} x {reqRec.AvgTime:N3}ms | min: {reqRec.MinTime:N3}ms | MAX: {reqRec.MaxTime:N3}ms";
|
|
// se richiede reset --> effettuo
|
|
if (resetCount)
|
|
{
|
|
TrackData[CallName].ListMsRec = new List<double>();
|
|
}
|
|
}
|
|
return answ;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Accumula record di tracciamento info esecuzione e restituisce numero elementi finali
|
|
/// </summary>
|
|
/// <param name="CallName">nome chiamata da registrare</param>
|
|
/// <param name="msDuration">Durata in ms</param>
|
|
/// <returns></returns>
|
|
public int RecordCall(string CallName, double msDuration)
|
|
{
|
|
if (TrackData.ContainsKey(CallName))
|
|
{
|
|
TrackData[CallName].ListMsRec.Add(msDuration);
|
|
}
|
|
else
|
|
{
|
|
TrackData.Add(CallName, new RecordData() { ListMsRec = new List<double>() { msDuration } });
|
|
}
|
|
return TrackData[CallName].NumCall;
|
|
}
|
|
|
|
#endregion Public Methods
|
|
|
|
#region Public Classes
|
|
|
|
/// <summary>
|
|
/// Record atomico informazioni x un dato task tracciato
|
|
/// </summary>
|
|
public class RecordData
|
|
{
|
|
#region Public Properties
|
|
|
|
/// <summary>
|
|
/// Tempo medio
|
|
/// </summary>
|
|
public double AvgTime
|
|
{
|
|
get => ListMsRec.Sum(x => x) / (NumCall > 0 ? NumCall : 1);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Lista registrazioni di tempi esecuzione in ms
|
|
/// </summary>
|
|
public List<double> ListMsRec { get; set; } = new List<double>();
|
|
|
|
/// <summary>
|
|
/// Tempo Massimo
|
|
/// </summary>
|
|
public double MaxTime
|
|
{
|
|
get => ListMsRec.OrderByDescending(x => x).FirstOrDefault();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Tempo minimo
|
|
/// </summary>
|
|
public double MinTime
|
|
{
|
|
get => ListMsRec.OrderBy(x => x).FirstOrDefault();
|
|
}
|
|
|
|
/// <summary>
|
|
/// numero registrazioni disponibili
|
|
/// </summary>
|
|
public int NumCall
|
|
{
|
|
get => ListMsRec.Count();
|
|
}
|
|
|
|
#endregion Public Properties
|
|
}
|
|
|
|
#endregion Public Classes
|
|
|
|
#region Private Fields
|
|
|
|
/// <summary>
|
|
/// Dizionario di dati statistici accumulati
|
|
/// </summary>
|
|
private Dictionary<string, RecordData> TrackData = new Dictionary<string, RecordData>();
|
|
|
|
#endregion Private Fields
|
|
}
|
|
} |