資源描述:
《c#高效反射調用方法類》由會員上傳分享,免費在線閱讀,更多相關內容在行業(yè)資料-天天文庫。
1、C#高效反射調用方法類Asp.Net和php中的md5C#中const與readonly的用法和區(qū)別C#高效反射調用方法類C#2010-10-2814:53:12閱讀62評論0字號:大中小訂閱MethodInfomethodInfo=typeof(Program).GetMethod("Call");methodInfo.Invoke(program,parameters);methodInfo實際上已經(jīng)用到反射了,只不過此時的反射相比較于后邊的Invoke方法性能損失很小,可以忽略,影
2、響性能部分在Invoke而不在一次簡單的GetMethod,MethodInfo可以緩存,因此只需要取一次就夠了,所以完全可以忽略不計。方法一:不需要用emit和lambda只要用Deleaget就能達到高效率:1.privatedelegatevoidmyDelegate(stringstr);privatestaticmyDelegateexecPage=null;publicvoidPage_Load(){if(execPage==null){//AppUtilityapp=newAppUtility
3、();//execPage=(myDelegate)Delegate.CreateDelegate(typeof(myDelegate),app,"ExecutePage");//執(zhí)行實體類的方法execPage=(myDelegate)Delegate.CreateDelegate(typeof(myDelegate),typeof(AppUtility),"ExecutePage");//靜態(tài)類方法}execPage("TP_Default.aspx");}2.Funcf=Delegate.Create
4、Delegate(typeof(Func),MethodInfo);f(...);http://blog.zhaojie.me/2008/11/invoke-method-by-lambda-expression.html方法二:使用傳統(tǒng)的.net反射機制,調用類的方法時,在調用頻率大的情況下,會感覺速度很慢。最近瀏覽盧彥的博客時,找到一個他改進后的反射調用類。試用以后感覺效率明顯提高,特推薦給大家。作者重新實現(xiàn)了,反射調用方法,但是調用接口和.net原有方法一致。而且調用時拋出的異常為所調用類的實際異常,
5、不像傳統(tǒng)方式返回為包裝異常。文章來源:http://www.codeproject.com/csharp/FastMethodInvoker.asp快速反射調用類usingSystem;usingSystem.Collections.Generic;usingSystem.Text;usingSystem.Reflection;usingSystem.Reflection.Emit;namespaceFastMethodInvoker{classFastInvoke{publicdelegateobject
6、FastInvokeHandler(objecttarget,object[]paramters);staticobjectInvokeMethod(FastInvokeHandlerinvoke,objecttarget,paramsobject[]paramters){returninvoke(null,paramters);}publicstaticFastInvokeHandlerGetMethodInvoker(MethodInfomethodInfo){DynamicMethoddynamicM
7、ethod=newDynamicMethod(string.Empty,typeof(object),newType[]{typeof(object),typeof(object[])},methodInfo.DeclaringType.Module);ILGeneratoril=dynamicMethod.GetILGenerator();ParameterInfo[]ps=methodInfo.GetParameters();Type[]paramTypes=newType[ps.Length];for
8、(inti=0;i