[源碼]Literacy 快速反射讀寫對象屬性,字段


  Literacy 說明

Literacy使用IL指令生成方法委托,性能方面,在調用次數達到一定量的時候比反射高很多

當然,用IL指令生成一個方法也是有時間消耗的,所以在只使用一次或少數幾次的情況,不但不能提高性能,反而會使性能下降,所以使用場合需要自己把握

下面是在我的電腦上做的一些測試(因機器配置不同會有少許誤差)

測試次數 Literacy 反射
10 16ms 0ms
100 15ms 0ms
1K 16ms 5ms
1W 16ms 50ms
10W 23ms 505ms
100W 87ms 5149ms

所以可以看出,再次數越多的時候和反射的差距越大,在100次以下反射幾乎不消耗時間,而IL生成委托就要消耗16ms

關於IL指令生成方法可以參考

玩轉動態編譯 - 高級篇:一,IL訪問靜態屬性和字段

玩轉動態編譯 - 高級篇:二,IL設置靜態屬性,字段和類型轉換

玩轉動態編譯 - 高級篇:三,實例屬性的讀取與設置

  Literacy 常用屬性方法

 

 Literacy  方法
 Literacy(Type type)  構造函數,加載所有公開屬性
 Literacy(Type type, bool ignoreCase)

 構造函數,加載所有公開屬性

 ignoreCase 指示屬性名是否區分大小寫

 NewObject()

 調用對象的無參構造函數,新建對象

 Literacy 靜態方法  
 CreateNewObject(Type type, Type[] argTypes = null)  IL構造一個用於調用對象指定構造函數的委托
 CreateGetter(PropertyInfo prop)  IL構造一個用於獲取對象屬性值的委托
 CreateGetter(FieldInfo field)  IL構造一個用於獲取對象字段值的委托
 CreateSetter(PropertyInfo prop)  IL構造一個用於設置對象屬性值的委托
 CreateSetter(FieldInfo field)  IL構造一個用於設置對象字段值的委托
 Literacy.Load 屬性  
 Load.PublicField()  加載公開的實例字段
 Load.NonPublicField()  加載非公開的實例字段
 Load.StaticField(bool hasNonPublic)  加載公開靜態的字段
 參數hasNonPublic指示是否同時加載非公開的靜態字段
 Load.NonPublicProperty()  加載非公開的實例屬性
 Load.StaticProperty(bool hasNonPublic)  加載公開靜態的屬性
 參數hasNonPublic指示是否同時加載非公開的靜態屬性
Literacy.Property 屬性  
 Property[string name]  獲取指定屬性的ObjectProperty對象
 Property[string name].GetValue(obj instance)  獲取實例對象的指定屬性的值
 Property[string name].TryGetValue(object instance, out object value)  嘗試獲取實例對象的指定屬性的值,失敗返回false
 Property[string name].SetValue(object instance, object value)  設置實例對象的指定屬性的值
 Property[string name].TrySetValue(object instance, object value)  嘗試設置實例對象的指定屬性的值,失敗返回false
 Literacy.Field 屬性  如果沒有手動加載字段,該屬性為null
 Field[string name]  獲取指定字段的ObjectProperty對象
 Field[string name].GetValue(obj instance)  獲取實例對象的指定字段的值
 Field[string name].TryGetValue(object instance, out object value)  嘗試獲取實例對象的指定字段的值,失敗返回false
 Field[string name].SetValue(object instance, object value)  設置實例對象的指定字段的值
 Field[string name].TrySetValue(object instance, object value)  嘗試設置實例對象的指定字段的值,失敗返回false

 

  Literacy調用實例

 

  Literacy源碼下載

源碼下載

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM