using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Diagnostics;
using testInvoke;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
Type t = typeof(Person);
MethodInfo methodInfo = t.GetMethod("Say");
Person person = new Person();
string word = "hello";
Person p = null;
object[] param = new object[] { word, p, 3 };
int TestTimes = 10000000; //测试次数,可自行调节看效果
#region 传统方式反射
Console.WriteLine("一千万次反射调用性能比较");
try
{
Stopwatch watch = new Stopwatch();
watch.Start();
for (int i = 0; i < TestTimes; i++)
{
methodInfo.Invoke(person, param);
}
watch.Stop();
Console.WriteLine(TestTimes.ToString() + " times 传统Invoke方式反射: " + watch.ElapsedMilliseconds + "ms");
}
catch (System.Exception ex)
{
Console.WriteLine("传统方式反射 直接错误:" + ex.Message);
Console.WriteLine("传统方式反射 内部错误:" + ex.InnerException.Message);
}
#endregion
#region 实例化反射
try
{
//Stopwatch watch = new Stopwatch();
//watch.Start();
//for (int i = 0; i < TestTimes; i++)
//{
// Assembly Asm = Assembly.Load("testInvoke");//反射出空间
// Type type = Asm.GetType("testInvoke.Person");//反射出空间下的类
// object AssClas = Activator.CreateInstance(type);//动态实例化反射回来的指定空间下的指定类