Esempio n. 1
0
        /// <summary>
        /// 开始性能跟踪
        /// </summary>
        /// <param name="profiler"></param>
        /// <returns></returns>
        public Trace RunProfiler(IProfiler profiler)
        {
            if (profiler.Status == TraceStatus.Started)
            {
                return(null);
            }

            if (profiler.Status == TraceStatus.Stopped)
            {
                profiler.Start();
            }

            Trace existingTrace = _traces[profiler];

            if (existingTrace == null)
            {
                return(null);
            }

            DeleteProfiler(profiler);

            IProfiler newProfiler = profiler.Copy();

            InitializeProfiler(newProfiler);

            foreach (TraceEventProperties p in existingTrace.TraceEvents)
            {
                newProfiler.AddTraceEvent(p.Event, p.Fields);
            }

            foreach (FilterProperties f in existingTrace.TraceFilters)
            {
                profiler.AddTraceFilter(f.Field, LogicalOperator.AND, f.Operator, f.TypedValue);
            }

            newProfiler.TraceEvent += profiler_TraceEvent;


            newProfiler.Start();

            Trace trace = new Trace(newProfiler, existingTrace.DataTable, existingTrace.TraceName);

            trace.TraceEvents = existingTrace.TraceEvents;
            _traces.Add(newProfiler, trace);

            return(trace);
        }
        public Trace RunProfiler(IProfiler profiler)
        {
            if(profiler.Status == TraceStatus.Started)
                return null;

            if(profiler.Status == TraceStatus.Stopped)
                profiler.Start();

            Trace existingTrace = _traces[profiler];
            if(existingTrace == null) return null;

            DeleteProfiler(profiler);

            IProfiler newProfiler = profiler.Copy();
            InitializeProfiler(newProfiler);

            foreach (TraceEventProperties p in existingTrace.TraceEvents)
            {
                newProfiler.AddTraceEvent(p.Event, p.Fields);
            }

            foreach (FilterProperties f in existingTrace.TraceFilters)
            {
                profiler.AddTraceFilter(f.Field, LogicalOperator.AND, f.Operator, f.TypedValue);
            }

            newProfiler.TraceEvent += profiler_TraceEvent;

            newProfiler.Start();

            Trace trace = new Trace(newProfiler, existingTrace.DataTable, existingTrace.TraceName);
            trace.TraceEvents = existingTrace.TraceEvents;
            _traces.Add(newProfiler, trace);

            return trace;
        }