Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel.Design;
- using System.Text;
- using System.Threading;
- using System.Diagnostics;
- using System.Linq;
- using System.Net;
- using System.Text.RegularExpressions;
- namespace Memory.Timers
- {
- public class Timer : IDisposable
- {
- private static string[] report;
- public static string Report => string.Join("", report) + MakeRest();
- private static string MakeRest()
- {
- var result = "";
- var rep = report.Where(z => z != null).ToList();
- var mainUsing = Convert.ToInt64(Regex.Replace(report[0], @"\D", ""));
- for (int i = rep.Count - 1; i > 0; i--)
- {
- var time = 0L;
- var splitted = rep[i].Split('\n').Where(z => z.Length > 0);
- foreach (var item in splitted)
- time += Convert.ToInt64(Regex.Replace(item, @"\D", ""));
- result += MakeReport(i * 4, "Rest", mainUsing - time);
- }
- return result;
- }
- private static readonly List<string> activeTimers = new List<string>();
- private readonly Stopwatch timer;
- private readonly string name;
- private bool isDisposed = false;
- public Timer(string name)
- {
- this.name = name;
- this.timer = new Stopwatch();
- this.timer.Start();
- }
- public static IDisposable Start(string timer = "*")
- {
- if (activeTimers.Count == 0)
- report = new string[10];
- activeTimers.Add(timer);
- return new Timer(timer);
- }
- ~Timer() => Dispose(false);
- public void Dispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
- protected virtual void Dispose(bool fromDisposeMethod)
- {
- if (!isDisposed)
- {
- if (fromDisposeMethod)
- {
- var indexOfName = activeTimers.IndexOf(name);
- timer.Stop();
- var offset = 4 * indexOfName;
- report[indexOfName] += MakeReport(offset, name, timer.ElapsedMilliseconds);
- activeTimers.Remove(name);
- }
- isDisposed = true;
- }
- }
- private static string MakeReport(int offset, string name, long time)
- {
- var result = new StringBuilder();
- result.Append(' ', offset);
- result.Append(name);
- result.Append(' ', 20 - name.Length - offset);
- result.Append(": " + time + '\n');
- return result.ToString();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement