Beispiel #1
0
        public void StartTrace()
        {
            lock (locker)
            {
                int currentThreadId = Thread.CurrentThread.ManagedThreadId;

                // выбираем поток из существующих
                if (traceResult.threads.ContainsKey(currentThreadId))
                {
                    // определяем метод
                    StackFrame newFrame   = new StackFrame(1);
                    string     className  = newFrame.GetMethod().DeclaringType.ToString();
                    string     methodName = newFrame.GetMethod().Name;

                    // инициализация при первом запуске
                    if (traceResult.threads.Count > 0)
                    {
                        MethodResult tempMethod = InitializeMethod(currentThreadId, methodName, className);

                        // измерение времени выполения
                        tempMethod.timer.Start();

                        // добавляем в стек для сохранения иерархии
                        traceResult.threads[currentThreadId].stack.Push(tempMethod);
                    }
                }
                else
                {
                    // инициализация нового потока
                    InitializeThread(currentThreadId);

                    // измерение времени выполения
                    traceResult.threads[currentThreadId].timer.Start();
                }
            }
        }
Beispiel #2
0
 public MethodResult Add(MethodResult tr)
 {
     tr.parent = this;
     children.Add(tr);
     return(children[children.Count - 1]);
 }