35 private static Dictionary<string, Entry> counters =
new Dictionary<string, Entry>();
37 private static Stack<Entry> stack;
39 private sealed class Entry
48 instance.Equals(
null);
49 Console.Error.WriteLine(
"{0,-40}{1,10}{2,12}",
"Event",
"Count",
"Time (ms)");
50 Console.Error.WriteLine(
"{0,-40}{1,10}{2,12}",
"-----",
"-----",
"---------");
52 foreach (KeyValuePair<string, Entry> e
in counters)
54 Entry entry = e.Value;
57 Console.Error.WriteLine(
"{0,-40}{1,10}", e.Key, entry.Count);
61 totalTime += entry.Time / 10000;
62 Console.Error.WriteLine(
"{0,-40}{1,10}{2,12}", e.Key, entry.Count, entry.Time / 10000);
65 Console.Error.WriteLine(
"{0,-40}{1,10}{2,12}",
"",
"",
"---------");
66 Console.Error.WriteLine(
"{0,-40}{1,10}{2,12}",
"",
"", totalTime);
69 [Conditional(
"PROFILE")]
70 internal static void Enter(
string name)
72 long ticks = DateTime.Now.Ticks;
77 stack =
new Stack<Entry>();
81 stack.Peek().Time += ticks;
84 if (!counters.TryGetValue(name, out e))
95 [Conditional(
"PROFILE")]
96 internal static void Leave(
string name)
98 long ticks = DateTime.Now.Ticks;
102 Entry e = counters[name];
106 ((Entry)stack.Peek()).Time -= ticks;
111 [Conditional(
"PROFILE")]
112 internal static void Count(
string name)
117 if (!counters.TryGetValue(name, out e))