zoukankan      html  css  js  c++  java
  • [源码]Literacy 快速反射读写对象属性,字段

    [源码]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源码下载

    源码下载

    分享代码,分享快乐
     
    分类: ASP.NETC#源码下载
  • 相关阅读:
    Double-Array Trie 原理解析
    LeetCode 之 Longest Valid Parentheses(栈)
    [Unity3D]Unity3D游戏开发之从Unity3D到Eclipse
    走进Struts2(一) — Struts2的执行流程及其工作原理
    网页页面NULL值对浏览器兼容性的影响
    基于cocos2d-x-3.2学习Box2D(一)
    记忆方法与高速阅读——什么是高速阅读
    ArcGIS 教程:Workflow Manager 高速浏览
    【cocos2d-x 3.7 飞机大战】 决战南海I (三) 敌机实现
    C语言事实上不简单:数组与指针
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3269797.html
Copyright © 2011-2022 走看看