126 lines
3.0 KiB
C#
126 lines
3.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Volian.Base.Library
|
|
{
|
|
/// <summary>
|
|
/// VolianTimer Class - Times from Open to Close
|
|
/// Stores the results in a static list
|
|
/// </summary>
|
|
public class VolianTimer
|
|
{
|
|
private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
|
|
static List<VolianTimer> _Timers = new List<VolianTimer>();
|
|
/// <summary>
|
|
/// User defined name - should be as specific as possible
|
|
/// Include Method Name, File Name and Line Number
|
|
/// </summary>
|
|
private string _Name;
|
|
public string Name
|
|
{
|
|
get { return _Name; }
|
|
set { _Name = value; }
|
|
}
|
|
/// <summary>
|
|
/// Set on open
|
|
/// </summary>
|
|
private DateTime _Start;
|
|
public DateTime Start
|
|
{
|
|
get { return _Start; }
|
|
set { _Start = value; }
|
|
}
|
|
/// <summary>
|
|
/// Calculate on Close
|
|
/// </summary>
|
|
private long _Ticks;
|
|
public long Ticks
|
|
{
|
|
get { return _Ticks; }
|
|
set { _Ticks = value; }
|
|
}
|
|
/// <summary>
|
|
/// Number of times open/close has been run
|
|
/// </summary>
|
|
private int _Count;
|
|
public int Count
|
|
{
|
|
get { return _Count; }
|
|
set { _Count = value; }
|
|
}
|
|
/// <summary>
|
|
/// Constructor
|
|
/// </summary>
|
|
public VolianTimer()
|
|
{
|
|
Count = 0;
|
|
Ticks = 0;
|
|
}
|
|
/// <summary>
|
|
/// Command Line Parameter /Timing turns timing on
|
|
/// </summary>
|
|
private static bool? _TimingsOn = null;
|
|
public static bool TimingsOn
|
|
{
|
|
get
|
|
{
|
|
if (_TimingsOn == null)
|
|
_TimingsOn = Volian.Base.Library.VlnSettings.GetCommandFlag("Timing");
|
|
return (bool) _TimingsOn;
|
|
}
|
|
}
|
|
/// <summary>
|
|
/// Constructor with Module and line number
|
|
/// </summary>
|
|
/// <param name="module">Method Name, File Name</param>
|
|
/// <param name="line">Code Line Number</param>
|
|
public VolianTimer(string module, int line)
|
|
{
|
|
Count = 0;
|
|
Ticks = 0;
|
|
Name = string.Format("{0}:{1}", module, line);
|
|
if(TimingsOn) _Timers.Add(this);
|
|
}
|
|
/// <summary>
|
|
/// Start Timer
|
|
/// </summary>
|
|
public void Open()
|
|
{
|
|
Start = DateTime.Now;
|
|
Count++;
|
|
}
|
|
/// <summary>
|
|
/// Stop Timer record statistics
|
|
/// </summary>
|
|
public void Close()
|
|
{
|
|
DateTime end = DateTime.Now;
|
|
TimeSpan ts = TimeSpan.FromTicks(end.Ticks - Start.Ticks);
|
|
Ticks += ts.Ticks;
|
|
}
|
|
/// <summary>
|
|
/// Show the results in the error log
|
|
/// </summary>
|
|
/// <returns></returns>
|
|
public static string ShowTimers()
|
|
{
|
|
StringBuilder sb = new StringBuilder();
|
|
if (TimingsOn)
|
|
{
|
|
sb.AppendLine(
|
|
"===============================================\r\n" +
|
|
"Count\tSeconds\tEvent\r\n" +
|
|
"----------------------------------------------- ");
|
|
foreach (VolianTimer tmr in _Timers)
|
|
sb.AppendLine(string.Format("{0}\t{1:N1}\t{2}", tmr.Count, TimeSpan.FromTicks(tmr.Ticks).TotalSeconds, tmr.Name));
|
|
sb.AppendLine("===============================================\r\n");
|
|
_MyLog.InfoFormat(sb.ToString());
|
|
}
|
|
return sb.ToString();
|
|
}
|
|
}
|
|
}
|