欢迎来到天天文库
浏览记录
ID:27481459
大小:261.69 KB
页数:73页
时间:2018-12-04
《.net反射技术》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、12.20老赵点滴-追求编程之美先做人,再做技术人员,最后做程序员。打造国内最好的.NET技术博客。FastReflectionLibrary2009-02-0101:25by老赵,9397visits全文英文版:FastReflectionLibrary这是我在CodePlex上创建的一个项目,它的网址是http://www.codeplex.com/FastReflectionLib,使用MicrosoftPublicLicense(Ms-PL),您可以随意在自己的产品中使用它的全部或部分代码。这个项目用到了我在《方法的直接调用,反射调用与Lambda
2、表达式调用》和《这下没理由嫌Eval的性能差了吧?》两篇文章里用到的做法,并加以提炼和扩展发布的项目——随便搞搞,留个印记,也供以后参考。基本使用方式反射是.NET中非常重要的功能。使用反射来构造对象、调用方法或是访问属性是某些项目中常用的做法之一(例如ORM框架)。众所周知,与一个成员的直接访问相比,反射调用的性能要低好几个数量级。FastReflectionLib提供了一种简便的方式,使一些常用反射调用的性能得到大幅提高。如下:usingSystem;usingSystem.Reflection;usingFastReflectionLib;names
3、paceSimpleConsole{classProgram{staticvoidMain(string[]args){PropertyInfopropertyInfo=typeof(string).GetProperty("Length");MethodInfomethodInfo=typeof(string).GetMethod("Contains");strings="HelloWorld!";//getvaluebynormalreflectionintlength1=(int)propertyInfo.GetValue(s,null);//get
4、valuebytheextensionmethodfromFastReflectionLib,//whichismuchfaster7312.20老赵点滴-追求编程之美先做人,再做技术人员,最后做程序员。打造国内最好的.NET技术博客。intlength2=(int)propertyInfo.FastGetValue(s);//invokebynormalreflectionboolresult1=(bool)methodInfo.Invoke(s,newobject[]{"Hello"});//invokebytheextensionmethodfrom
5、FastReflectionLib,//whichismuchfasterboolresult2=(bool)methodInfo.FastInvoke(s,newobject[]{"Hello"});}}}在得到了PropertyInfo或MethodInfo对象之后,我们可以使用GetValue或Invoke方法来访问属性或调用方法。在FastReflectionLib中为PropertyInfo、MethodInfo等对象定义了对应的扩展方法,于是我们就可以使用这些扩展方法(从代码上看来,基本上只是在原来的方法之前加上“Fast”)来进行调用,与之前
6、的方法相比,新的扩展方法性能有极大的提高。直接使用各工作对象各FastXxx方法实际上是将PropertyInfo等对象作为Key去一个Cache中获取对应的工作对象,然后调用工作对象上对应的方法。因此,直接调用工作对象可以获得更好的性能。各工作对象类型的对应关系如下:·PropertyInfo:IPropertyAccessor·MethodInfo:IMethodInvoker·ConstructorInfo:IConstructorInvoker·FieldInfo:IFieldAccessor我们可以使用FastReflectionCaches.M
7、ethodInvokerCache来获取一个IMethodInvoker对象:staticvoidExecute(MethodInfomethodInfo,objectinstance,inttimes){IMethodInvokerinvoker=FastReflectionCaches.MethodInvokerCache.Get(methodInfo);object[]parameters=newobject[0];for(inti=0;i8、0老赵点滴-追求编程之美先做人,再做技术人员,最后做程序员。打造国
8、0老赵点滴-追求编程之美先做人,再做技术人员,最后做程序员。打造国
此文档下载收益归作者所有