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); }
/// <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); }
/// <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); }