123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- namespace LJLib.D
- {
- public static class DebugHelper
- {
- private static Dictionary<string, Stopwatch> _watchs = null;
- private static Dictionary<string, int> _counters = null;
- private static int cnt = 0;
- private static Dictionary<string, Stopwatch> watchs
- {
- get
- {
- if (_watchs == null)
- {
- _watchs = new Dictionary<string, Stopwatch>();
- }
- return _watchs;
- }
- }
- private static Dictionary<string, int> Counters
- {
- get
- {
- if (_counters == null)
- {
- _counters = new Dictionary<string, int>();
- }
- return _counters;
- }
- }
- private static Stopwatch GetWatch(string key)
- {
- if (!watchs.ContainsKey(key))
- {
- watchs[key] = new Stopwatch();
- }
- return watchs[key];
- }
- #region 公共方法
- [Conditional("DEBUG")]
- public static void Start(string key)
- {
- var counters = Counters;
- if (!counters.ContainsKey(key))
- {
- counters[key] = 1;
- }
- else
- {
- counters[key] += 1;
- }
- var watch = GetWatch(key);
- watch.Start();
- }
- [Conditional("DEBUG")]
- public static void Stop(string key)
- {
- var watch = GetWatch(key);
- watch.Stop();
- }
- [Conditional("DEBUG")]
- public static void PrintAll()
- {
- string msg = string.Empty;
- PrintAll(ref msg);
- Debug.Write(msg);
- }
- [Conditional("DEBUG")]
- public static void PrintAll(ref string msg)
- {
- msg = "DEBUG TIMER:";
- if (_watchs != null)
- {
- foreach (var watch in _watchs)
- {
- if (string.IsNullOrEmpty(msg))
- {
- msg = string.Empty;
- }
- else
- {
- msg += "\r\n";
- }
- if (Counters.ContainsKey(watch.Key))
- {
- msg += string.Format("{0}:{1:#,##0.##} / {2} = {3}", watch.Key, watch.Value.Elapsed.TotalSeconds,
- Counters[watch.Key], watch.Value.Elapsed.TotalSeconds/Counters[watch.Key]);
- }
-
- }
- _watchs.Clear();
- _counters.Clear();
- }
- }
- [Conditional("DEBUG")]
- public static void Reset()
- {
- cnt = 0;
- }
- [Conditional("DEBUG")]
- public static void Inc()
- {
- cnt++;
- //if (cnt % 1000 == 0)
- //{
- // Debug.Write(string.Format("inc:{0}", cnt));
- //}
- if (cnt >= 1000000)
- {
- Debug.Write("可能出现了死循环");
- throw new Exception("可能出现了死循环");
- }
- }
- #endregion
- }
- }
|