Exemple #1
0
        public Trace RunProfiler(string serverName, string username, string password, string traceName, string rawConn, TraceEventProperties[] events, FilterProperties[] filters)
        {
            IProfiler profiler = ToolsFactory.Instance.CreateProfiler(serverName, username, password, rawConn);

            InitializeProfiler(profiler);

            foreach (TraceEventProperties p in events)
            {
                profiler.AddTraceEvent(p.Event, p.Fields);
            }

            foreach (FilterProperties f in filters)
            {
                if (f.CheckFilter())
                {
                    profiler.AddTraceFilter(f.Field, LogicalOperator.AND, f.Operator, f.TypedValue);
                }
            }

            profiler.TraceEvent += profiler_TraceEvent;

            profiler.Start();

            Trace trace = new Trace(profiler, new DataTable(), traceName);

            trace.TraceEvents  = events;
            trace.TraceFilters = filters;
            _traces.Add(profiler, trace);

            return(trace);
        }
Exemple #2
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);
        }
Exemple #3
0
        /// <summary>
        /// 开始性能跟踪
        /// </summary>
        /// <param name="serverName">数据库服务器名</param>
        /// <param name="username">用户名</param>
        /// <param name="password">密码</param>
        /// <param name="traceName">跟踪名称</param>
        /// <param name="rawConn"></param>
        /// <param name="events">跟踪语</param>
        /// <param name="filters">跟踪条件</param>
        /// <returns></returns>
        public Trace RunProfiler(string serverName, string username, string password, string traceName, string rawConn, TraceEventProperties[] events, FilterProperties[] filters)
        {
            IProfiler profiler = ToolsFactory.Instance.CreateProfiler(serverName, username, password, rawConn);

            //初始化跟踪,创建跟踪文件
            InitializeProfiler(profiler);


            var pro = profiler.GetType().GetProperty("TraceFilePath");

            if (pro != null)
            {
                var trcPath = pro.GetValue(profiler, new object[0]).ToString();
                MessageBox.Show(string.Format("在SQL服务上会产生一个{0}文件,跟踪结束后请删除,否则会占用SQL服务器磁盘空间。", trcPath), "提示", MessageBoxButtons.OK, MessageBoxIcon.Warning);
            }


            //给跟踪添加事件
            foreach (TraceEventProperties p in events)
            {
                profiler.AddTraceEvent(p.Event, p.Fields);
            }
            //给跟踪添加条件
            foreach (FilterProperties f in filters)
            {
                if (f.CheckFilter())
                {
                    profiler.AddTraceFilter(f.Field, LogicalOperator.AND, f.Operator, f.TypedValue);
                }
            }
            //订阅事件
            profiler.TraceEvent += profiler_TraceEvent;
            //开始跟踪
            profiler.Start();

            Trace trace = new Trace(profiler, new DataTable(), traceName);

            trace.TraceEvents  = events;
            trace.TraceFilters = filters;
            _traces.Add(profiler, trace);

            return(trace);
        }