コード例 #1
0
        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.");
        }
コード例 #2
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);
        }