- 1、本文档共73页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《反射技术
Fast Reflection Library2009-02-01 01:25 by 老赵, 9397 visits全文英文版:Fast Reflection Library这是我在CodePlex上创建的一个项目,它的网址是/FastReflectionLib,使用Microsoft Public License (Ms-PL),您可以随意在自己的产品中使用它的全部或部分代码。这个项目用到了我在《方法的直接调用,反射调用与Lambda表达式调用》和《这下没理由嫌Eval的性能差了吧?》两篇文章里用到的做法,并加以提炼和扩展发布的项目——随便搞搞,留个印记,也供以后参考。基本使用方式反射是.NET中非常重要的功能。使用反射来构造对象、调用方法或是访问属性是某些项目中常用的做法之一(例如 ORM框架)。众所周知,与一个成员的直接访问相比,反射调用的性能要低好几个数量级。FastReflectionLib提供了一种简便的方式,使一些 常用反射调用的性能得到大幅提高。如下:using System;using System.Reflection;using FastReflectionLib;namespace SimpleConsole{class Program{static void Main(string[] args) {PropertyInfo propertyInfo = typeof(string).GetProperty(Length);MethodInfo methodInfo = typeof(string).GetMethod(Contains);string s = Hello World!;// get value by normal reflectionint length1 = (int)propertyInfo.GetValue(s, null);// get value by the extension method from FastReflectionLib, // which is much fasterint length2 = (int)propertyInfo.FastGetValue(s);// invoke by normal reflectionbool result1 = (bool)methodInfo.Invoke(s, new object[] { Hello });// invoke by the extension method from FastReflectionLib, // which is much fasterbool result2 = (bool)methodInfo.FastInvoke(s, new object[] { Hello }); } }}在得到了PropertyInfo或MethodInfo对象之后,我们可以使用GetValue或Invoke方法来访问属性或调用方法。在 FastReflectionLib中为PropertyInfo、MethodInfo等对象定义了对应的扩展方法,于是我们就可以使用这些扩展方法 (从代码上看来,基本上只是在原来的方法之前加上“Fast”)来进行调用,与之前的方法相比,新的扩展方法性能有极大的提高。直接使用各工作对象各FastXxx方法实际上是将PropertyInfo等对象作为Key去一个Cache中获取对应的工作对象,然后调用工作对象上对应的方法。因此,直接调用工作对象可以获得更好的性能。各工作对象类型的对应关系如下:PropertyInfo:IPropertyAccessor MethodInfo:IMethodInvoker ConstructorInfo:IConstructorInvoker FieldInfo:IFieldAccessor我们可以使用FastReflectionCaches.MethodInvokerCache来获取一个IMethodInvoker对象:static void Execute(MethodInfo methodInfo, object instance, int times){ IMethodInvoker invoker = FastReflectionCaches.MethodInvokerCache.Get(methodInfo);object[] parameters = new object[0];for (int i = 0; i times; i++) { invoker.Invoke(instance, parameters); }}工作对
您可能关注的文档
- 《校长任期三年目标.doc
- 家庭财产保险合同书0.doc
- 《双曲线的性质.doc
- 家庭装饰装修的施工合同0.doc
- 家庭装饰工程合同0.doc
- 《双曲线的性质及应用.doc
- 《双曲线的性质教学设计.doc
- 家庭装修合同0.doc
- 家庭房屋装修合同范本0.doc
- 《校门对联.doc
- 2025年八年级统编版语文寒假复习 专题02 说明文阅读(考点剖析+对点训练).docx
- 中石油下属企事业单位名称英文翻译.pdf
- 20102014建筑规范图集等相关目录.pdf
- 井控管理制度修订版.pdf
- 乌鲁木齐万达广场销售物业分户验收方案A版.pdf
- 2025年七年级统编版语文寒假复习 专题06 整本书阅读(考点剖析+对点训练).docx
- 2025年九年级统编版语文寒假复习 01 第一周:九上第一、二单元复习.pdf
- 2025年九年级统编版语文寒假复习 04 第四周:九上第六单元及名著阅读.docx
- 2025年七年级统编版语文寒假预习 第01讲 孙权劝学.docx
- 2025年九年级统编版语文寒假复习 03 第三周:九上第四、五单元复习.docx
文档评论(0)