標籤:
反射時,由於編譯器要判斷許可權,身份等操作,所以比直接操作要慢
測試代碼:
const int NUM = 1000000; Stopwatch sw = new Stopwatch(); sw.Start(); for (int i = 0; i < NUM; i++) { ReflectTest rt = new ReflectTest(); rt.CountSomething(); } sw.Stop(); Console.WriteLine(sw.ElapsedTicks); sw.Reset(); sw.Start(); for (int i = 0; i < NUM; i++) { Assembly assembly = Assembly.GetExecutingAssembly(); Type t = assembly.GetType("ConsoleApplication1.ReflectTest"); ConstructorInfo constructorInfo = t.GetConstructors().OrderBy(c => c.GetParameters().Length).FirstOrDefault(); object obj = constructorInfo.Invoke(new object[constructorInfo.GetParameters().Length]); //object obj = Activator.CreateInstance(t); MethodInfo methodInfo = t.GetMethod("CountSomething"); methodInfo.Invoke(obj,new object[methodInfo.GetParameters().Length]); } sw.Stop(); Console.WriteLine(sw.ElapsedTicks); Console.ReadKey();
結果:
反射用時是直接調用的2到3倍,所以非特殊需求,項目中就不要用反射吧。。。
C#,反射和直接調用的效率差別