前两天在别人的Blogs里面看到了一个反射运用的例子,对这个概念我理解的也不透彻,所以把代码放到自己的Blogs里面,供自己学习使用
用编译器执行:
反射,反射优化_加载   private string test1()
反射,反射优化_程序集_02反射,反射优化_i++_03        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05            
int now = System.Environment.TickCount;
反射,反射优化_程序集_05
反射,反射优化_程序集_05            
for (int i = 0; i < 1000; i++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                
for (int j = 0; j < 100; j++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                    CTester aTest 
= new CTester();
反射,反射优化_程序集_05                    aTest.test1();
反射,反射优化_程序集_05
反射,反射优化_i++_18                }

反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05            
string time = (System.Environment.TickCount - now).ToString();
反射,反射优化_程序集_05            
return time;
反射,反射优化_数组类型_23        }

用反射(没有优化)执行
反射,反射优化_加载     private string test2()
反射,反射优化_程序集_02反射,反射优化_i++_03        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05            
int now = System.Environment.TickCount;
反射,反射优化_程序集_05            
for (int i = 0; i < 1000; i++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                
for (int j = 0; j < 100; j++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                    
//Type theTest = theTest = Type.GetType("ConsoleApplication2.CTester"); ;//
反射,反射优化_程序集_05

反射,反射优化_程序集_05                    Type theTest 
= Type.GetType("ConsoleApplication2.CTester"); ;//
反射,反射优化_程序集_05

反射,反射优化_程序集_05
反射,反射优化_程序集_05                    ConsoleApplication2.CTester theobj 
= theTest.InvokeMember(null, BindingFlags.CreateInstance
反射,反射优化_程序集_05                        , 
nullnullnullas ConsoleApplication2.CTester;
反射,反射优化_程序集_05                    theobj.test1();
反射,反射优化_i++_18                }

反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05            
string time = (System.Environment.TickCount - now).ToString();
反射,反射优化_程序集_05            
return time;
反射,反射优化_数组类型_23        }

反射,反射优化_加载
优化之后的反射
反射,反射优化_加载  static Hashtable table = new Hashtable();
反射,反射优化_加载        
private string test3()
反射,反射优化_程序集_02反射,反射优化_i++_03        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05            
int now = System.Environment.TickCount;
反射,反射优化_程序集_05
反射,反射优化_程序集_05            
for (int i = 0; i < 1000; i++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                
for (int j = 0; j < 100; j++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                    Type theTest 
= null;
反射,反射优化_程序集_05                    
//ContainsKey 确定 System.Collections.Hashtable 是否包含特定键
反射,反射优化_程序集_05
                    if (table.ContainsKey("ConsoleApplication2.CTester"))
反射,反射优化_数组类型_08反射,反射优化_类类型_09                    
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                        theTest 
= table["ConsoleApplication2.CTester"as Type;
反射,反射优化_i++_18                    }

反射,反射优化_程序集_05                    
else
反射,反射优化_数组类型_08反射,反射优化_类类型_09                    
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                        
//Type theTest
反射,反射优化_程序集_05
                        theTest = Type.GetType("ConsoleApplication2.CTester");
反射,反射优化_程序集_05                        
//Hashtable table
反射,反射优化_程序集_05
                        table.Add("ConsoleApplication2.CTester", theTest);
反射,反射优化_i++_18                    }

反射,反射优化_程序集_05                    ConsoleApplication2.CTester theobj 
= theTest.InvokeMember(null, BindingFlags.CreateInstance
反射,反射优化_程序集_05                        , 
nullnullnullas ConsoleApplication2.CTester;
反射,反射优化_程序集_05                    theobj.test1();
反射,反射优化_i++_18                }

反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05            
string time = (System.Environment.TickCount - now).ToString();
反射,反射优化_程序集_05            
return time;
反射,反射优化_数组类型_23        }
加载程序集并反射
反射,反射优化_加载        static object InvokeMehod(string FileName,
反射,反射优化_加载            
string MethodName,
反射,反射优化_加载            
object[] Args)
反射,反射优化_程序集_02反射,反射优化_i++_03        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05            Assembly a 
= Assembly.LoadFrom(FileName);
反射,反射优化_程序集_05
反射,反射优化_程序集_05
反射,反射优化_程序集_05            MethodInfo method 
= null;
反射,反射优化_程序集_05            Type HereType 
= null;
反射,反射优化_程序集_05
反射,反射优化_程序集_05
反射,反射优化_程序集_05            
//在模块上进行反射
反射,反射优化_程序集_05
            foreach (Module m in a.GetModules())
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                
//表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。
反射,反射优化_程序集_05
                foreach (Type t in m.GetTypes())
反射,反射优化_数组类型_08反射,反射优化_类类型_09                
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                    
//发现方法的属性 (Attribute) 并提供对方法元数据的访问。
反射,反射优化_程序集_05
                    foreach (MethodInfo mInfo in t.GetMethods())
反射,反射优化_数组类型_08反射,反射优化_类类型_09                    
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                        
if (mInfo.Name == MethodName)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                            ParameterInfo[] pInfo 
= mInfo.GetParameters();
反射,反射优化_程序集_05                            
if (pInfo.Length == Args.Length)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                                
bool same = true;
反射,反射优化_程序集_05                                
for (int i = 0; i < pInfo.Length; i++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                                
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                                    
if (Args[i] != null && pInfo[i].ParameterType != typeof(object)
反射,反射优化_程序集_05                                        
&& pInfo[i].ParameterType != typeof(object[]))
反射,反射优化_数组类型_08反射,反射优化_类类型_09                                    
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                                        
if (pInfo[i].ParameterType != Args[i].GetType())
反射,反射优化_数组类型_08反射,反射优化_类类型_09                                        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                                            same 
= false;
反射,反射优化_i++_18                                        }

反射,反射优化_i++_18                                    }

反射,反射优化_i++_18                                }

反射,反射优化_程序集_05                                
if (same)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                                
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                                    HereType 
= t;
反射,反射优化_程序集_05                                    method 
= mInfo;
反射,反射优化_i++_18                                }

反射,反射优化_i++_18                            }

反射,反射优化_i++_18                        }

反射,反射优化_程序集_05
反射,反射优化_程序集_05                        
if (method != null)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                            
break;
反射,反射优化_i++_18                        }

反射,反射优化_i++_18                    }

反射,反射优化_程序集_05
反射,反射优化_程序集_05                    
if (method != null)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                    
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                        
break;
反射,反射优化_i++_18                    }

反射,反射优化_i++_18                }

反射,反射优化_程序集_05
反射,反射优化_程序集_05                
if (method != null)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                    
break;
反射,反射优化_i++_18                }

反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05            
if (method == null)
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                
//Log.LogException(typeof(Excute), "没有发现:" + FileName + "/" + MethodName, new Exception("没有发现:" + FileName + "/" + MethodName));
反射,反射优化_程序集_05
                return null;
反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05
反射,反射优化_程序集_05            
//ClassLibrary1.CTester
反射,反射优化_程序集_05

反射,反射优化_程序集_05            
object ins = null;
反射,反射优化_程序集_05            
if (!method.IsStatic)
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                ins 
= a.CreateInstance(HereType.FullName);
反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05           
反射,反射优化_程序集_05            
反射,反射优化_程序集_05            
object RetObject = method.Invoke(ins, Args);
反射,反射优化_程序集_05            
return RetObject;
反射,反射优化_数组类型_23        }

反射,反射优化_加载
反射,反射优化_加载
反射,反射优化_加载
反射,反射优化_加载        
private string test5()
反射,反射优化_程序集_02反射,反射优化_i++_03        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05            
反射,反射优化_程序集_05            
int now = System.Environment.TickCount;
反射,反射优化_程序集_05            
for (int i = 0; i < 1000; i++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                
for (int j = 0; j < 100; j++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                
反射,反射优化_类类型_04{
反射,反射优化_数组类型_08反射,反射优化_类类型_09                    InvokeMehod(
@"F:\test\Reflection_Test\ConsoleApplication1\ClassLibrary1\bin\Debug\ClassLibrary1.dll""test1"new object[] 反射,反射优化_类类型_04{ });
反射,反射优化_i++_18                }

反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05            
string time = (System.Environment.TickCount - now).ToString();
反射,反射优化_程序集_05            
return time;
反射,反射优化_数组类型_23        }

反射,反射优化_加载

对 CTester 类实例化,为了加载程序集并反射
反射,反射优化_加载using System;
反射,反射优化_加载
using System.Collections.Generic;
反射,反射优化_加载
using System.Text;
反射,反射优化_加载
反射,反射优化_加载
namespace ClassLibrary1
反射,反射优化_程序集_02反射,反射优化_i++_03
反射,反射优化_类类型_04{
反射,反射优化_程序集_05    
//被测试类
反射,反射优化_程序集_05
    public class CTester
反射,反射优化_数组类型_08反射,反射优化_类类型_09    
反射,反射优化_类类型_04{
反射,反射优化_程序集_05        
public CTester()
反射,反射优化_数组类型_08反射,反射优化_类类型_09        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05            a 
= 10;
反射,反射优化_i++_18        }

反射,反射优化_程序集_05
反射,反射优化_程序集_05        
public void test1()
反射,反射优化_数组类型_08反射,反射优化_类类型_09        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05            a 
= (a - 0.0001* 1.0001;
反射,反射优化_i++_18        }

反射,反射优化_程序集_05        
private double a;
反射,反射优化_数组类型_08反射,反射优化_类类型_09        
public double geta() 反射,反射优化_类类型_04return a; }
反射,反射优化_i++_18    }

反射,反射优化_数组类型_23}

反射,反射优化_加载



(附)主程序如下:
反射,反射优化_加载using System;
反射,反射优化_加载
using System.Collections.Generic;
反射,反射优化_加载
using System.Text;
反射,反射优化_加载
using System.Reflection;
反射,反射优化_加载
using System.Collections;
反射,反射优化_加载
反射,反射优化_加载
//测试类
反射,反射优化_加载
namespace ConsoleApplication2
反射,反射优化_程序集_02反射,反射优化_i++_03
反射,反射优化_类类型_04{
反射,反射优化_程序集_05
反射,反射优化_程序集_05    
public class CTester
反射,反射优化_数组类型_08反射,反射优化_类类型_09    
反射,反射优化_类类型_04{
反射,反射优化_程序集_05        
public CTester()
反射,反射优化_数组类型_08反射,反射优化_类类型_09        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05            a 
= 10;
反射,反射优化_i++_18        }

反射,反射优化_程序集_05
反射,反射优化_程序集_05
反射,反射优化_程序集_05        
public void test1()
反射,反射优化_数组类型_08反射,反射优化_类类型_09        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05            a 
= (a - 0.0001* 1.0001;
反射,反射优化_i++_18        }

反射,反射优化_程序集_05        
private double a;
反射,反射优化_数组类型_08反射,反射优化_类类型_09        
public double geta() 反射,反射优化_类类型_04return a; }
反射,反射优化_i++_18    }

反射,反射优化_程序集_05
反射,反射优化_程序集_05    
class Program
反射,反射优化_数组类型_08反射,反射优化_类类型_09    
反射,反射优化_类类型_04{
反射,反射优化_程序集_05        
private string test1()
反射,反射优化_数组类型_08反射,反射优化_类类型_09        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05            
int now = System.Environment.TickCount;
反射,反射优化_程序集_05
反射,反射优化_程序集_05            
for (int i = 0; i < 1000; i++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                
for (int j = 0; j < 100; j++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                    CTester aTest 
= new CTester();
反射,反射优化_程序集_05                    aTest.test1();
反射,反射优化_程序集_05
反射,反射优化_i++_18                }

反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05            
string time = (System.Environment.TickCount - now).ToString();
反射,反射优化_程序集_05            
return time;
反射,反射优化_i++_18        }

反射,反射优化_程序集_05
反射,反射优化_程序集_05        
static Hashtable table = new Hashtable();
反射,反射优化_程序集_05        
private string test3()
反射,反射优化_数组类型_08反射,反射优化_类类型_09        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05            
int now = System.Environment.TickCount;
反射,反射优化_程序集_05
反射,反射优化_程序集_05            
for (int i = 0; i < 1000; i++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                
for (int j = 0; j < 100; j++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                    Type theTest 
= null;
反射,反射优化_程序集_05                    
//ContainsKey 确定 System.Collections.Hashtable 是否包含特定键
反射,反射优化_程序集_05
                    if (table.ContainsKey("ConsoleApplication2.CTester"))
反射,反射优化_数组类型_08反射,反射优化_类类型_09                    
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                        theTest 
= table["ConsoleApplication2.CTester"as Type;
反射,反射优化_i++_18                    }

反射,反射优化_程序集_05                    
else
反射,反射优化_数组类型_08反射,反射优化_类类型_09                    
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                        
//Type theTest
反射,反射优化_程序集_05
                        theTest = Type.GetType("ConsoleApplication2.CTester");
反射,反射优化_程序集_05                        
//Hashtable table
反射,反射优化_程序集_05
                        table.Add("ConsoleApplication2.CTester", theTest);
反射,反射优化_i++_18                    }

反射,反射优化_程序集_05                    ConsoleApplication2.CTester theobj 
= theTest.InvokeMember(null, BindingFlags.CreateInstance
反射,反射优化_程序集_05                        , 
nullnullnullas ConsoleApplication2.CTester;
反射,反射优化_程序集_05                    theobj.test1();
反射,反射优化_i++_18                }

反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05            
string time = (System.Environment.TickCount - now).ToString();
反射,反射优化_程序集_05            
return time;
反射,反射优化_i++_18        }

反射,反射优化_程序集_05
反射,反射优化_程序集_05        
private string test2()
反射,反射优化_数组类型_08反射,反射优化_类类型_09        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05            
int now = System.Environment.TickCount;
反射,反射优化_程序集_05            
for (int i = 0; i < 1000; i++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                
for (int j = 0; j < 100; j++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                    
//Type theTest = theTest = Type.GetType("ConsoleApplication2.CTester"); ;//
反射,反射优化_程序集_05

反射,反射优化_程序集_05                    Type theTest 
= Type.GetType("ConsoleApplication2.CTester"); ;//
反射,反射优化_程序集_05

反射,反射优化_程序集_05
反射,反射优化_程序集_05                    ConsoleApplication2.CTester theobj 
= theTest.InvokeMember(null, BindingFlags.CreateInstance
反射,反射优化_程序集_05                        , 
nullnullnullas ConsoleApplication2.CTester;
反射,反射优化_程序集_05                    theobj.test1();
反射,反射优化_i++_18                }

反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05            
string time = (System.Environment.TickCount - now).ToString();
反射,反射优化_程序集_05            
return time;
反射,反射优化_i++_18        }

反射,反射优化_程序集_05
反射,反射优化_程序集_05        
static object InvokeMehod(string FileName,
反射,反射优化_程序集_05            
string MethodName,
反射,反射优化_程序集_05            
object[] Args)
反射,反射优化_数组类型_08反射,反射优化_类类型_09        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05            Assembly a 
= Assembly.LoadFrom(FileName);
反射,反射优化_程序集_05
反射,反射优化_程序集_05
反射,反射优化_程序集_05            MethodInfo method 
= null;
反射,反射优化_程序集_05            Type HereType 
= null;
反射,反射优化_程序集_05
反射,反射优化_程序集_05
反射,反射优化_程序集_05            
//在模块上进行反射
反射,反射优化_程序集_05
            foreach (Module m in a.GetModules())
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                
//表示类型声明:类类型、接口类型、数组类型、值类型、枚举类型、类型参数、泛型类型定义,以及开放或封闭构造的泛型类型。
反射,反射优化_程序集_05
                foreach (Type t in m.GetTypes())
反射,反射优化_数组类型_08反射,反射优化_类类型_09                
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                    
//发现方法的属性 (Attribute) 并提供对方法元数据的访问。
反射,反射优化_程序集_05
                    foreach (MethodInfo mInfo in t.GetMethods())
反射,反射优化_数组类型_08反射,反射优化_类类型_09                    
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                        
if (mInfo.Name == MethodName)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                            ParameterInfo[] pInfo 
= mInfo.GetParameters();
反射,反射优化_程序集_05                            
if (pInfo.Length == Args.Length)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                                
bool same = true;
反射,反射优化_程序集_05                                
for (int i = 0; i < pInfo.Length; i++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                                
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                                    
if (Args[i] != null && pInfo[i].ParameterType != typeof(object)
反射,反射优化_程序集_05                                        
&& pInfo[i].ParameterType != typeof(object[]))
反射,反射优化_数组类型_08反射,反射优化_类类型_09                                    
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                                        
if (pInfo[i].ParameterType != Args[i].GetType())
反射,反射优化_数组类型_08反射,反射优化_类类型_09                                        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                                            same 
= false;
反射,反射优化_i++_18                                        }

反射,反射优化_i++_18                                    }

反射,反射优化_i++_18                                }

反射,反射优化_程序集_05                                
if (same)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                                
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                                    HereType 
= t;
反射,反射优化_程序集_05                                    method 
= mInfo;
反射,反射优化_i++_18                                }

反射,反射优化_i++_18                            }

反射,反射优化_i++_18                        }

反射,反射优化_程序集_05
反射,反射优化_程序集_05                        
if (method != null)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                            
break;
反射,反射优化_i++_18                        }

反射,反射优化_i++_18                    }

反射,反射优化_程序集_05
反射,反射优化_程序集_05                    
if (method != null)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                    
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                        
break;
反射,反射优化_i++_18                    }

反射,反射优化_i++_18                }

反射,反射优化_程序集_05
反射,反射优化_程序集_05                
if (method != null)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                    
break;
反射,反射优化_i++_18                }

反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05            
if (method == null)
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                
//Log.LogException(typeof(Excute), "没有发现:" + FileName + "/" + MethodName, new Exception("没有发现:" + FileName + "/" + MethodName));
反射,反射优化_程序集_05
                return null;
反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05
反射,反射优化_程序集_05            
//ClassLibrary1.CTester
反射,反射优化_程序集_05

反射,反射优化_程序集_05            
object ins = null;
反射,反射优化_程序集_05            
if (!method.IsStatic)
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                ins 
= a.CreateInstance(HereType.FullName);
反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05           
反射,反射优化_程序集_05            
反射,反射优化_程序集_05            
object RetObject = method.Invoke(ins, Args);
反射,反射优化_程序集_05            
return RetObject;
反射,反射优化_i++_18        }

反射,反射优化_程序集_05
反射,反射优化_程序集_05
反射,反射优化_程序集_05
反射,反射优化_程序集_05        
private string test5()
反射,反射优化_数组类型_08反射,反射优化_类类型_09        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05            
反射,反射优化_程序集_05            
int now = System.Environment.TickCount;
反射,反射优化_程序集_05            
for (int i = 0; i < 1000; i++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                
for (int j = 0; j < 100; j++)
反射,反射优化_数组类型_08反射,反射优化_类类型_09                
反射,反射优化_类类型_04{
反射,反射优化_数组类型_08反射,反射优化_类类型_09                    InvokeMehod(
@"F:\test\Reflection_Test\ConsoleApplication1\ClassLibrary1\bin\Debug\ClassLibrary1.dll""test1"new object[] 反射,反射优化_类类型_04{ });
反射,反射优化_i++_18                }

反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05            
string time = (System.Environment.TickCount - now).ToString();
反射,反射优化_程序集_05            
return time;
反射,反射优化_i++_18        }

反射,反射优化_程序集_05
反射,反射优化_程序集_05
反射,反射优化_程序集_05
反射,反射优化_程序集_05
反射,反射优化_程序集_05        
static void Main(string[] args)
反射,反射优化_数组类型_08反射,反射优化_类类型_09        
反射,反射优化_类类型_04{
反射,反射优化_程序集_05            Program p 
= new Program();
反射,反射优化_程序集_05            
string ticks = p.test1();
反射,反射优化_程序集_05            Console.WriteLine(
"用编译器执行:" + ticks);
反射,反射优化_程序集_05            
string t = p.test2();
反射,反射优化_程序集_05            Console.WriteLine(
"用反射执行" + t);
反射,反射优化_程序集_05            
string t1 = p.test3();
反射,反射优化_程序集_05            Console.WriteLine(
"优化之后的反射:" + t1);
反射,反射优化_程序集_05            
string t2 = p.test5();
反射,反射优化_程序集_05            Console.WriteLine(
"加载程序集并反射:" + t2);
反射,反射优化_程序集_05            
if (ticks.ToString() == "0")
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                Console.WriteLine(
"反射/编译: 不在一个级别上面");
反射,反射优化_i++_18            }

反射,反射优化_程序集_05            
else
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                Console.WriteLine(
"反射/编译 =" + (Convert.ToInt32(t) / Convert.ToInt32(ticks)).ToString());
反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05            
if (ticks.ToString() == "0")
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                Console.WriteLine(
"加载程序集并反射/编译: 不在一个级别上面");
反射,反射优化_i++_18            }

反射,反射优化_程序集_05            
else
反射,反射优化_数组类型_08反射,反射优化_类类型_09            
反射,反射优化_类类型_04{
反射,反射优化_程序集_05                Console.WriteLine(
"加载程序集并反射/编译 =" + (Convert.ToInt32(t2) / Convert.ToInt32(ticks)).ToString());
反射,反射优化_i++_18            }

反射,反射优化_程序集_05
反射,反射优化_程序集_05
反射,反射优化_程序集_05            
//Console.WriteLine("加载程序集并反射/反射 =" + (Convert.ToInt32(t2) / Convert.ToInt32(t)).ToString());
反射,反射优化_程序集_05

反射,反射优化_程序集_05            Console.Read();
反射,反射优化_i++_18        }

反射,反射优化_i++_18    }

反射,反射优化_数组类型_23}

反射,反射优化_加载