Literacy 說明
Literacy使用IL指令生成方法委托,性能方面,在調用次數達到一定量的時候比反射高很多
當然,用IL指令生成一個方法也是有時間消耗的,所以在的情況,不但不能提高性能,反而會使性能下降,所以使用場合需要自己把握
下面是在我的電腦上做的一些測試(因機器配置不同會有少許誤差)
關於IL指令生成方法可以參考
玩轉動態編譯 - 高級篇:一,IL訪問靜態屬性和字段
玩轉動態編譯 - 高級篇:二,IL設置靜態屬性,字段和類型轉換
玩轉動態編譯 - 高級篇:三,實例屬性的讀取與設置
Literacy 常用屬性方法
Literacy(Type type)
構造函數,加載所有公開屬性
Literacy(Type type, bool ignoreCase)
構造函數,加載所有公開屬性
ignoreCase 指示屬性名是否區分大小寫
NewObject()
調用對象的無參構造函數,新建對象
CreateNewObject(Type type, Type[] argTypes = null)
IL構造一個用於調用對象指定構造函數的委托
CreateGetter(PropertyInfo prop)
IL構造一個用於獲取對象屬性值的委托
CreateGetter(FieldInfo field)
IL構造一個用於獲取對象字段值的委托
CreateSetter(PropertyInfo prop)
IL構造一個用於設置對象屬性值的委托
CreateSetter(FieldInfo field)
IL構造一個用於設置對象字段值的委托
Load.PublicField()
加載公開的實例字段
Load.NonPublicField()
加載非公開的實例字段
Load.StaticField(bool hasNonPublic)
加載公開靜態的字段
參數hasNonPublic指示是否同時加載非公開的靜態字段
Load.NonPublicProperty()
加載非公開的實例屬性
Load.StaticProperty(bool hasNonPublic)
加載公開靜態的屬性
參數hasNonPublic指示是否同時加載非公開的靜態屬性
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
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源碼下載
源碼下載