public void StartTrace(MethodSubstructure method, int threadID) { //Добавление в список "струкр потоков" новой или возврат уже существующей.Ключ - Ид Потока. ThreadSubstructure threadSub = threadSubstructures.GetOrAdd(threadID, new ThreadSubstructure()); threadSub.StartTrace(method); }
public void StartTrace(MethodSubstructure method) { //Если на момент запуска трейсера стек пуст, то этот метод не является вложенным, добавление в список методов потока. if (stackOfMethodSubstructures.Count == 0) { listOfMethodSubstructures.Add(method); } stackOfMethodSubstructures.Push(method); method.StartTrace(); }
// *Если стек не пуст, то тот метод, который ниже по стеку является родителем(вложенным в) того, кто выше. public void StopTrace() { MethodSubstructure currentMethod = stackOfMethodSubstructures.Pop(); MethodSubstructure parentMethod = null; currentMethod.StopTrace(); threadTime = GetThreadTime(); // Добавление в список вложенных методов (кого?) метода "родителя" его вложенных методов. if (stackOfMethodSubstructures.Count != 0) { parentMethod = stackOfMethodSubstructures.Peek(); parentMethod.listOfMethodSubstructures.Add(currentMethod); } }