private static void AddTreeElement(ref List <TracerLog> tempLog, List <CurrentTraceInfo> traceInfo, ref int i) { int j; while (i < traceInfo.Count) { if (traceInfo[i].IsOpened) { j = i; TracerLog x = new TracerLog(); x.Info = traceInfo[i]; x.TraceChilds = new List <TracerLog>(); i++; AddTreeElement(ref x.TraceChilds, traceInfo, ref i); x.Info.DeltaTime = (traceInfo[i - 1].TraceTime - traceInfo[j].TraceTime).TotalMilliseconds; tempLog.Add(x); } else { i++; return; } } }
public static List <TracerLog> Stop() { Console.WriteLine("Stop"); lock (Locker) { _traceStackDict = new Dictionary <int, List <CurrentTraceInfo> >(); _traceStackCount = new Dictionary <int, TimeLaps>(); // выбираем все номера потоков foreach (CurrentTraceInfo cti in _traceStack) { List <CurrentTraceInfo> obj; if (!_traceStackDict.TryGetValue(cti.ThreadId, out obj)) { _traceStackDict.Add(cti.ThreadId, new List <CurrentTraceInfo>()); _traceStackCount.Add(cti.ThreadId, new TimeLaps()); } } // считаем "операторные" скобки foreach (CurrentTraceInfo cti in _traceStack) { _traceStackDict[cti.ThreadId].Add(cti); if (cti.IsOpened) { TimeLaps tempTl = new TimeLaps { BeginCount = _traceStackCount[cti.ThreadId].BeginCount + 1, EndCount = _traceStackCount[cti.ThreadId].EndCount }; _traceStackCount[cti.ThreadId] = tempTl; } else { TimeLaps tempTl = new TimeLaps { BeginCount = _traceStackCount[cti.ThreadId].BeginCount, EndCount = _traceStackCount[cti.ThreadId].EndCount + 1 }; _traceStackCount[cti.ThreadId] = tempTl; } } // балансируем "скобки" foreach (KeyValuePair <int, List <CurrentTraceInfo> > cti in _traceStackDict) { if (_traceStackCount[cti.Key].BeginCount != _traceStackCount[cti.Key].EndCount) { for (var i = 0; i < Math.Abs(_traceStackCount[cti.Key].EndCount - _traceStackCount[cti.Key].BeginCount); i++) { var temp = new CurrentTraceInfo { IsOpened = false, ThreadId = Thread.CurrentThread.ManagedThreadId }; _traceStackDict[cti.Key].Add(temp); } } } // собственно построение дерево _traceLog = new List <TracerLog>(); foreach (KeyValuePair <int, List <CurrentTraceInfo> > kvp in _traceStackDict) { var j = 0; var x = new TracerLog { TraceChilds = new List <TracerLog>() }; AddTreeElement(ref x.TraceChilds, kvp.Value, ref j); _traceLog.Add(x); } _isStarted = false; } return(_traceLog); }
public static List<TracerLog> Stop() { Console.WriteLine("Stop"); lock (Locker) { _traceStackDict = new Dictionary<int, List<CurrentTraceInfo>>(); _traceStackCount = new Dictionary<int, TimeLaps>(); // выбираем все номера потоков foreach (CurrentTraceInfo cti in _traceStack) { List<CurrentTraceInfo> obj; if (!_traceStackDict.TryGetValue(cti.ThreadId, out obj)) { _traceStackDict.Add(cti.ThreadId, new List<CurrentTraceInfo>()); _traceStackCount.Add(cti.ThreadId, new TimeLaps()); } } // считаем "операторные" скобки foreach (CurrentTraceInfo cti in _traceStack) { _traceStackDict[cti.ThreadId].Add(cti); if (cti.IsOpened) { TimeLaps tempTl = new TimeLaps { BeginCount = _traceStackCount[cti.ThreadId].BeginCount + 1, EndCount = _traceStackCount[cti.ThreadId].EndCount }; _traceStackCount[cti.ThreadId] = tempTl; } else { TimeLaps tempTl = new TimeLaps { BeginCount = _traceStackCount[cti.ThreadId].BeginCount, EndCount = _traceStackCount[cti.ThreadId].EndCount + 1 }; _traceStackCount[cti.ThreadId] = tempTl; } } // балансируем "скобки" foreach (KeyValuePair<int, List<CurrentTraceInfo>> cti in _traceStackDict) { if (_traceStackCount[cti.Key].BeginCount != _traceStackCount[cti.Key].EndCount) { for (var i = 0; i < Math.Abs(_traceStackCount[cti.Key].EndCount - _traceStackCount[cti.Key].BeginCount); i++) { var temp = new CurrentTraceInfo {IsOpened = false, ThreadId = Thread.CurrentThread.ManagedThreadId}; _traceStackDict[cti.Key].Add(temp); } } } // собственно построение дерево _traceLog = new List<TracerLog>(); foreach (KeyValuePair<int, List<CurrentTraceInfo>> kvp in _traceStackDict) { var j = 0; var x = new TracerLog {TraceChilds = new List<TracerLog>()}; AddTreeElement(ref x.TraceChilds, kvp.Value, ref j); _traceLog.Add(x); } _isStarted = false; } return _traceLog; }
public static List <TracerLog> Stop() { lock (Locker) { traceStackDict = new Dictionary <int, List <CurrentTraceInfo> >(); traceStackCount = new Dictionary <int, TimeLaps>(); foreach (CurrentTraceInfo cti in traceStack) { List <CurrentTraceInfo> obj; if (!traceStackDict.TryGetValue(cti.ThreadId, out obj)) { traceStackDict.Add(cti.ThreadId, new List <CurrentTraceInfo>()); traceStackCount.Add(cti.ThreadId, new TimeLaps()); } } foreach (CurrentTraceInfo cti in traceStack) { traceStackDict[cti.ThreadId].Add(cti); if (cti.IsOpened) { TimeLaps tempTl = new TimeLaps { BeginCount = traceStackCount[cti.ThreadId].BeginCount + 1, EndCount = traceStackCount[cti.ThreadId].EndCount }; traceStackCount[cti.ThreadId] = tempTl; } else { TimeLaps tempTl = new TimeLaps { BeginCount = traceStackCount[cti.ThreadId].BeginCount, EndCount = traceStackCount[cti.ThreadId].EndCount + 1 }; traceStackCount[cti.ThreadId] = tempTl; } } foreach (KeyValuePair <int, List <CurrentTraceInfo> > cti in traceStackDict) { if (traceStackCount[cti.Key].BeginCount != traceStackCount[cti.Key].EndCount) { for (var i = 0; i < Math.Abs(traceStackCount[cti.Key].EndCount - traceStackCount[cti.Key].BeginCount); i++) { var temp = new CurrentTraceInfo { IsOpened = false, ThreadId = Thread.CurrentThread.ManagedThreadId }; traceStackDict[cti.Key].Add(temp); } } } //построения дерева traceLog = new List <TracerLog>(); foreach (KeyValuePair <int, List <CurrentTraceInfo> > kvp in traceStackDict) { var j = 0; var x = new TracerLog { TraceChilds = new List <TracerLog>() }; AddTreeElement(ref x.TraceChilds, kvp.Value, ref j); traceLog.Add(x); } isStarted = false; } return(traceLog); }
private static void AddTreeElement(ref List<TracerLog> tempLog, List<CurrentTraceInfo> traceInfo, ref int i) { int j; while (i < traceInfo.Count) { if (traceInfo[i].IsOpened) { j = i; TracerLog x = new TracerLog(); x.Info = traceInfo[i]; x.TraceChilds = new List<TracerLog>(); i++; AddTreeElement(ref x.TraceChilds, traceInfo, ref i); x.Info.DeltaTime = (traceInfo[i-1].TraceTime - traceInfo[j].TraceTime).TotalMilliseconds; tempLog.Add(x); } else { i++; return; } } }