| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 | using System;using System.Diagnostics;using System.Linq;using System.Runtime.CompilerServices;using InABox.Core;namespace InABox.Core{        public class Profiler : IDisposable    {        private Stopwatch _stopwatch;        protected string MethodName { get; set; }        public string? ClassName { get; set; }        private bool _logOnDispose = false;        public Profiler(bool logOnDispose, [CallerMemberName] string methodName = "") : base()        {            _logOnDispose = logOnDispose;            MethodName = methodName;            _stopwatch = new Stopwatch();            _stopwatch.Start();        }        public long GetElapsedMilliseconds() => _stopwatch.ElapsedMilliseconds;        public void Pause() => _stopwatch.Stop();        public void Resume() => _stopwatch.Start();        public long Restart()        {            var ms = _stopwatch.ElapsedMilliseconds;            _stopwatch.Restart();            return ms;        }        public void Log()        {            _stopwatch.Stop();            Logger.Send(LogType.Information, "", $"- {MethodName}{ClassName}() returned in {_stopwatch.ElapsedMilliseconds}ms");            _stopwatch.Restart();        }        public void Log(int count)        {            _stopwatch.Stop();            Logger.Send(LogType.Information, "", $"- {MethodName}{ClassName}() returned {count} items in {_stopwatch.ElapsedMilliseconds}ms");            _stopwatch.Restart();        }        public void Log(string name)        {            _stopwatch.Stop();            Logger.Send(LogType.Information, "", $"- {MethodName}{ClassName}() [{name}] returned in {_stopwatch.ElapsedMilliseconds}ms");            _stopwatch.Restart();        }        public void Log(string format, params object[] values)        {            _stopwatch.Stop();            Logger.Send(LogType.Information, "", $"- [{String.Format(format,values)}] returned in {_stopwatch.ElapsedMilliseconds}ms");            _stopwatch.Restart();                    }        public void Dispose()        {            if (_logOnDispose)                Log();            _stopwatch?.Stop();            _stopwatch = null;        }        public void Dispose(int count)        {            if (_logOnDispose)                Log(count);            _stopwatch?.Stop();            _stopwatch = null;        }    }        public class Profiler<T> : Profiler    {        public Profiler(bool logOnDispose, [CallerMemberName] string methodName = "") : base(logOnDispose, methodName)        {            ClassName = typeof(T).Name.Split('.').Last();        }    }}
 |