public static MiniProfiler GetMiniProfiler(this IProfiler profiler) { if (profiler is MiniProfiler miniProfiler) { return(miniProfiler); } if (profiler is MiniProfilerAdapter profilerAdapter) { return((MiniProfiler)profilerAdapter.Current); } throw new NotSupportedException($"Expected MiniProfiler but was '{profiler.GetType().Name}'. Ensure MiniProfilerFeature plugin is registered."); }
/// <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); }