diff --git a/PROMS/Volian.Base.Library/VolianTimer.cs b/PROMS/Volian.Base.Library/VolianTimer.cs new file mode 100644 index 00000000..636aa63c --- /dev/null +++ b/PROMS/Volian.Base.Library/VolianTimer.cs @@ -0,0 +1,125 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Volian.Base.Library +{ + /// + /// VolianTimer Class - Times from Open to Close + /// Stores the results in a static list + /// + public class VolianTimer + { + private static readonly log4net.ILog _MyLog = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); + static List _Timers = new List(); + /// + /// User defined name - should be as specific as possible + /// Include Method Name, File Name and Line Number + /// + private string _Name; + public string Name + { + get { return _Name; } + set { _Name = value; } + } + /// + /// Set on open + /// + private DateTime _Start; + public DateTime Start + { + get { return _Start; } + set { _Start = value; } + } + /// + /// Calculate on Close + /// + private long _Ticks; + public long Ticks + { + get { return _Ticks; } + set { _Ticks = value; } + } + /// + /// Number of times open/close has been run + /// + private int _Count; + public int Count + { + get { return _Count; } + set { _Count = value; } + } + /// + /// Constructor + /// + public VolianTimer() + { + Count = 0; + Ticks = 0; + } + /// + /// Command Line Parameter /Timing turns timing on + /// + private static bool? _TimingsOn = null; + public static bool TimingsOn + { + get + { + if (_TimingsOn == null) + _TimingsOn = Volian.Base.Library.VlnSettings.GetCommandFlag("Timing"); + return (bool) _TimingsOn; + } + } + /// + /// Constructor with Module and line number + /// + /// Method Name, File Name + /// Code Line Number + public VolianTimer(string module, int line) + { + Count = 0; + Ticks = 0; + Name = string.Format("{0}:{1}", module, line); + if(TimingsOn) _Timers.Add(this); + } + /// + /// Start Timer + /// + public void Open() + { + Start = DateTime.Now; + Count++; + } + /// + /// Stop Timer record statistics + /// + public void Close() + { + DateTime end = DateTime.Now; + TimeSpan ts = TimeSpan.FromTicks(end.Ticks - Start.Ticks); + Ticks += ts.Ticks; + } + /// + /// Show the results in the error log + /// + /// + 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(); + } + } +}