public void BeforeInvoke(ICallInvocation invocation) { if (!isInit) { isInit = true; var m = invocation.MethodBase; var type = m.DeclaringType; var timeAttr = m.GetCustomAttribute <PerformanceTimeAttribute>(true); if (!string.IsNullOrEmpty(timeAttr.Method)) { var bindingFlags = BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static; var types = new Type[] { typeof(PerformanceTimeContext) }; callbackMethod = type.GetMethod(timeAttr.Method, types, bindingFlags); } } PerformanceTimeContext ctx = new PerformanceTimeContext() { Target = invocation.Target, Method = invocation.MethodBase, StartTime = DateTime.Now, }; invocation.Data[key] = ctx; }
//[CompileHoldName] static void PerformanceLog(PerformanceTimeContext context) { PerformanceTest.context = context; Console.WriteLine(context.Method + " " + context.Elapsed.TotalMilliseconds); }