首页 > 学院 > 开发设计 > 正文

C#语法糖之 ReflectionSugar 通用反射类

2019-11-17 02:16:28
字体:
来源:转载
供稿:网友

C#语法糖之 ReflectionSugar 通用反射类

用法很简单:

ReflectionSugar rs = new ReflectionSugar(100);//缓存100秒 ,可以不填默认不缓存

rs.有嘛点嘛

性能测试:

性能测试类源码

http://www.VEVb.com/sunkaixuan/p/4540840.html

using SyntacticSugar;using System;using System.Collections.Generic;using System.Linq;using System.Reflection;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;namespace Test.IO{    public partial class ReflectionTest : System.Web.UI.Page    {        PRotected void Page_Load(object sender, EventArgs e)        {            //性能测试类            PerformanceTest p = new PerformanceTest();            p.SetCount(100000);//循环次数(默认:1)            p.SetIsMultithread(false);//是否启动多线程测试 (默认:false)            /******************************CreateInstance********************************/            //带cache            p.Execute(            i =>            {                CreateInstanceByCache();//调用函数            },            message => { Response.Write(message); });   //总共执行时间:0.09901秒            //不带cache            p.Execute(              i =>              {                  CreateInstanceNoCache();//调用函数              },             message => { Response.Write(message); });   //总共执行时间:0.32002秒            /******************************ExecuteMethod********************************/            //带cache            p.Execute(            i =>            {                ExecuteMethodByCache();//调用函数            },            message => { Response.Write(message); });   //总共执行时间:0.36202秒            //不带cache            p.Execute(              i =>              {                  ExecuteMethodNoCache();//调用函数              },             message => { Response.Write(message); });   //总共执行时间:1.35508秒            /******************************ExecuteMethod********************************/            //带cache            p.Execute(            i =>            {                ExecuteMethodByCache();//调用函数            },            message => { Response.Write(message); });   //总共执行时间:0.36202秒            //不带cache            p.Execute(              i =>              {                  ExecuteMethodNoCache();//调用函数              },             message => { Response.Write(message); });   //总共执行时间:1.35508秒            /******************************LoadFile********************************/            //带cache            p.Execute(            i =>            {                 LoadFileByCache();//调用函数            },            message => { Response.Write(message); });   //总共执行时间:0.11801            //不带cache            p.Execute(              i =>              {                  LoadFileNoCache();//调用函数              },             message => { Response.Write(message); });   //总共执行时间:4.89628秒            //还有其它方法就不测试了        }        //获取实列        private static void CreateInstanceByCache()        {            ReflectionSugar rs = new ReflectionSugar(100);//缓存100秒            var f = rs.CreateInstance<FileSugar>("SyntacticSugar.FileSugar", "SyntacticSugar");        }        //获取实列        private static void CreateInstanceNoCache()        {            string path = "SyntacticSugar.FileSugar,SyntacticSugar";//命名空间.类型名,程序集            Type o = Type.GetType(path);//加载类型            FileSugar obj = (FileSugar)Activator.CreateInstance(o, true);//根据类型创建实例        }        //执行函数        private static void ExecuteMethodByCache()        {            ReflectionSugar rs = new ReflectionSugar(100);//缓存100秒            var path = rs.ExecuteMethod("SyntacticSugar", "FileSugar", "GetMapPath", "~/");        }        //执行函数        private static void ExecuteMethodNoCache()        {            ReflectionSugar rs = new ReflectionSugar(0);//缓存0秒            var path = rs.ExecuteMethod("SyntacticSugar", "FileSugar", "GetMapPath", "~/");        }        //加载程序集        private static void LoadFileByCache()        {            ReflectionSugar rs = new ReflectionSugar(100);//缓存100秒            Assembly ams = rs.LoadFile(@"D:/学习/SyntacticSugar/SyntacticSugar/bin/Debug/SyntacticSugar.dll");        }        //加载程序集        private static void LoadFileNoCache()        {            ReflectionSugar rs = new ReflectionSugar(0);//缓存100秒            Assembly ams = rs.LoadFile(@"D:/学习/SyntacticSugar/SyntacticSugar/bin/Debug/SyntacticSugar.dll");        }    }}

  

反射类源码:

using System;using System.Collections.Generic;using System.Linq;using System.Reflection;using System.Text;using System.Web;using System.Web.Caching;namespace SyntacticSugar{    /// <summary>    /// ** 描述:反射通用类    /// ** 创始时间:2010-2-28    /// ** 修改时间:-    /// ** 修改人:sunkaixuan    /// ** 使用说明: http://www.VEVb.com/sunkaixuan/p/4635710.html    /// </summary>    public class ReflectionSugar    {        public static int Minutes = 60;        public static int Hour = 60 * 60;        public static int Day = 60 * 60 * 24;        private int _time = 0;        private bool _isCache { get { return _time > 0; } }        /// <summary>        /// 缓存时间,0为不缓存(默认值:0秒,单位:秒)        /// </summary>        public ReflectionSugar(int time = 0)        {            _time = time;        }        /// <summary>        /// 创建对象实例        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="fullName">命名空间.类型名</param>        /// <param name="assemblyName">程序集(dll名称)</param>        /// <returns></returns>        public T CreateInstance<T>(string fullName, string assemblyName)        {            string key = GetKey("CreateInstance1", fullName, assemblyName);            if (_isCache)                if (ContainsKey(key))                {                    return Get<T>(key);                }            string path = fullName + "," + assemblyName;//命名空间.类型名,程序集            Type o = Type.GetType(path);//加载类型            object obj = Activator.CreateInstance(o, true);//根据类型创建实例            var reval = (T)obj;            if (_isCache)                Add<T>(key, reval, _time);            return reval;//类型转换并返回        }        /// <summary>        /// 创建对象实例        /// </summary>        /// <typeparam name="T">要创建对象的类型</typeparam>        /// <param name="assemblyName">类型所在程序集名称(dll名称)</param>        /// <param name="nameSpace">类型所在命名空间</param>        /// <param name="className">类型名</param>        /// <returns></returns>        public T CreateInstance<T>(string assemblyName, string nameSpace, string className)        {            string key = GetKey("CreateInstance2", assemblyName, nameSpace, className);            if (_isCache)                if (ContainsKey(key))                {                    return Get<T>(key);                }            try            {                string fullName = nameSpace + "." + className;//命名空间.类型名                //此为第一种写法                object ect = Assembly.Load(assemblyName).CreateInstance(fullName);//加载程序集,创建程序集里面的 命名空间.类型名 实例                var reval = (T)ect;//类型转换并返回                if (_isCache)                    Add<T>(key, reval, _time);                return reval;                //下面是第二种写法                //string path = fullName + "," + assemblyName;//命名空间.类型名,程序集                //Type o = Type.GetType(path);//加载类型                //object obj = Activator.CreateInstance(o, true);//根据类型创建实例                //return (T)obj;//类型转换并返回            }            catch            {                //发生异常,返回类型的默认值                var reval = default(T);                if (_isCache)                    Add<T>(key, reval, _time);                return reval;//类型转换            }        }        /// <summary>        /// 加载程序集        /// </summary>        /// <param name="path"></param>        /// <returns></returns>        public Assembly LoadFile(string path)        {            string key = GetKey("LoadFile", pat
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表