C# TimeRuler

Date: 2020-01-30

Measure time elapsed

public class TimeRuler
{
    private readonly Stopwatch stopWatch = new Stopwatch();
    private readonly StringBuilder stringBuilder = new StringBuilder();
    private long _prevMeasure = 0;
    private string currentDescription;

    public TimeRuler(bool start = true)
    {
        if (start) stopWatch.Start();
    }
    public void Measure(string description)
    {
        var measure = stopWatch.ElapsedMilliseconds;
        var added = measure - _prevMeasure;
        _prevMeasure = measure;
        stringBuilder.AppendLine($"{measure,12} {added,12} + {description}");
    }

    public void Start(string description)
    {
        currentDescription = description;
        Measure($"Start: {description}");
    }
    public void End() => Measure($"End: {currentDescription}");
    public override string ToString() => stringBuilder.ToString();
}

using System;
using System.Diagnostics;
using System.Text;

namespace Domain.Helpers
{
    public class TimeRuler : IDisposable
    {
        private Stopwatch stopWatch = new Stopwatch();
        private StringBuilder stringBuilder = new StringBuilder();
        private long _prevMeasure = 0;
        public TimeRuler(bool start = true)
        {
            if (start)
                stopWatch.Start();
        }
        public void Measure(string description)
        {
            var measure = stopWatch.ElapsedMilliseconds;
            var added = measure - _prevMeasure;
            _prevMeasure = measure;
            stringBuilder.AppendLine($"{measure,12} {added,12} + {description}");
        }
        public override string ToString()
        {
            return stringBuilder.ToString();
        }
        #region IDisposable Support
        private bool disposedValue = false;

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    if (stopWatch.IsRunning)
                        stopWatch.Stop();
                    stopWatch = null;
                }
                disposedValue = true;
            }
        }
        public void Dispose()
        {
            Dispose(true);
        }
        #endregion
    }
}
using (var timeRuler = new TimeRuler())
{
	timeRuler.Measure("A");
	Calculate1();
	timeRuler.Measure("B");
	Calculate2();
	timeRuler.Measure("C");
	Console.WriteLine(timeRuler.ToString())
}
33130cookie-checkC# TimeRuler