源碼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 快速反射讀寫對象屬性,字段

  Literacy源码下载

源码下载

 

 

更多相关文章
一周排行
  • 


    		    hosts文件修改完無效的解決辦法
    当我们需要屏蔽某些恶意网站或访问特定网址以及在内网做测试的时候,常常需要修改hosts 文 ...
  • os 模块,正如其名,主要与操作系统打交道的,下面介绍下一些常见的功能 一.文件与目录操作 1.os.getcwd() 获取当前路径 >>> import os >>> os.ge ...
  • 有如下需求,需要控制一个table内几个tr的显示问题.一开始想的方法是在这几个要显示的tr外面套一个div,利用div的display:none属性来解决. 但是后来发现div和tr嵌套的时候会有问题.例如,如果我
  • 2015hdu多校聯賽補題hdu5293 Tree chain problem
    题目链接:http://acm.hdu.edu.cn/showproblem.php?pi
  • 申请 事情应该从去年(2013)说起,好基友从百度离职跳到了Google,回学校打印本科成绩单,然后晚上在scuacm群里,结果Dr. zuo问我想去实习么,正好有学长可以内推. 于是乎写了简历,然后提交了. 没过几
  • 最近在用git,但git学习曲线实在是有点高. 好在找到一个文档 https://www.atlassian.com/git/tutorial/,以下就是学习笔记吧! git init git init 在当前目录初 ...
  • 被指定爲此窗體的 MdiParent 的窗體不是 MdiContainer。 參數名: value
    解决方案 添加this.IsMdiContainer  = true; 或者下面的方法
  • 1. uboot $mtdparts 和 linux /dev/mtd* 的联系 比如: uboot:# setenv mtdparts [email protected](boot),[email protected] ...
  • 1 /// <summary> 2 /// 替换body中的img src属性 附加上域名 3 /// </summary> 4 /// <param name="str&qu ...
  • http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1312 1312: 榜单 Time Limit: 1 Sec  Memory Limit: 128 MB Submi