public static void StartProfiling(out ProfilingState __state, MethodInfo __originalMethod)
        {
            var attr = (IProfilerAttribute)__originalMethod.GetCustomAttributes().Where(a => a is IProfilerAttribute).FirstOrDefault();

            __state = new ProfilingState(attr.DisplayName, attr.ProfilerName);
            __state.Start();
        }
        public static void StopProfiling(ProfilingState __state)
        {
            var globalState = GlobalProfilingState.GetInstance;
            var result      = __state.Stop();
            var profiler    = string.IsNullOrEmpty(__state.ProfilerName) ?
                              globalState.GetDefault() :
                              globalState.GetProfiler(__state.ProfilerName);

            profiler.AddProfilingResult(result);
        }
        public static void StopProfilingAsync(ref Task __result, ProfilingState __state)
        {
            var contin =
                __result.ContinueWith(T =>
            {
                var globalState = GlobalProfilingState.GetInstance;
                var result      = __state.Stop();
                var profiler    = string.IsNullOrEmpty(__state.ProfilerName) ?
                                  globalState.GetDefault() :
                                  globalState.GetProfiler(__state.ProfilerName);
                profiler.AddProfilingResult(result);
            });

            contin.Wait();
        }