# blqw.Literacy **Repository Path**: blqw/blqw.Literacy ## Basic Information - **Project Name**: blqw.Literacy - **Description**: 使用IL.Emit方式快速访问属性,字段和方法 - **Primary Language**: C# - **License**: WTFPL - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 14 - **Forks**: 7 - **Created**: 2016-02-20 - **Last Updated**: 2023-12-10 ## Categories & Tags **Categories**: utils **Tags**: None ## README # 使用IL.Emit方式快速访问属性,字段和方法 ## 特色 ### 全,易,快 功能强大 上手简单 性能优异 ## 与反射的性能比较 ### 测试1 | 测试内容 | 循环次数 |运行时间| CPU时钟周期 | |:----------------------:|:-------:|:-----:|:----------: | |PropertyInfo.GetValue() | 1000000 | 204ms | 467,083,802 | |dynamic | 1000000 | 41ms | 92,844,899 | |Literacy | 1000000 | 28ms | 65,759,428 | ### 测试2 | 测试内容 | 循环次数 | 初始化时间|运行时间| CPU时钟周期 | |:-----------------------------:|:-------:|:--------:|:-----:|:----------: | |Lambda.Compile() | 1000000 | 1.7693ms | 33ms | 467,083,802 | |CreateDelegate(GetGetMethod()) | 1000000 | 1.8108ms | 29ms | 92,844,899 | |Literacy | 1000000 | 1.6712ms | 12ms | 65,759,428 | #### [性能测试代码](https://github.com/blqw/blqw.Literacy/blob/master/Demo/Program.cs) ## 更新说明 #### 2016.06.30 * 更新MEF #### 2016.04.15 * 更新MEF #### 2016.02.23 * 修复bug #### 2016.02.21 * 增加导入插件 `CreateGetter`,`CreateSetter`,`CreateCaller` #### 2016.02.20 * 优化IoC模块 #### 2015.11.06 * 将 Convert3 独立 * 内置MEF模块,用于IOC方式载入Convert3 #### 2015.06.11 * 增加对匿名类的支持,支持包括匿名类的属性赋值和new操作 #### 2015.06.09 * 签入Convert3项目 代替原有类型转换方案 删除部分不常用的特性 #### 2014.12.25 * ObjectProperty中增加 MappingName 属性 * Convert2中增加对象转对象和对象转DataTable的相关方法 #### 2014.12.12 * 在 Convert2 中增加全角转半角 半角转全角的方法 #### 2014.12.04 * 增加接口 `IMemberMappingAttributre` 用于控制对象成员名称的映射关系,对象成员特性如果实现该接口,则`Convert2`中转换实体的方法优先考虑映射名称 #### 2014.10.10 * 日常维护,优化了StringToGuid的逻辑,优化性能 #### 2014.09.22 * 正式版发布 #### 2014.09.14 * 修正Convert2枚举类型转换中的bug * 修正Convert2可空值类型转换中的bug * 修正Convert2实体转换中的bug * 修正Convert2转换object类型中的bug * 修正Literacy在反射式会忽略系统自动生成字段的问题 * ObjectProperty中增加AutoField属性,用于判断是否为自动生成的字段 * ObjectPropertyCollection 循环时(foreach)不会出现自动字段 * 修正字段可赋值判断为是否常量(之前是判断是否Readonly,事实证明Readonly的字段也是可以赋值的) * 修改TypeCodes枚举,支持更多类型 #### 2014.08.31 * 增加静态类 Convert2, 用于转换对象 * TypeInfo增加TryParse和Convert方法 用于转换对象 #### 2014.08.19 * 增加静态类 TypesHelper, 存放用于处理Type对象的静态方法 * 增加密封类 TypeInfo, 用于拓展系统Type对象的属性和方法 * 修改Literacy类中的缓存,将操作转移至TypesHelper * 修改TypeCodes的计算方法,将操作转移至TypeInfo #### 2014.07.30 * 为Literacy和ObjectProperty实体增加ID(自增标识,2个类共享自增序列)和UID(全球唯一标识符GUID)方便在做缓存的时候作为key使用 * 增加TypeCodes枚举,用于扩展系统的TypeCode 会稍微影响构造Literacy的速度,但是由于Literacy本身是全局缓存,所以影响不大 #### 2014.07.29 * 增加对特性的支持,现在可以从 Literacy 或 Literacy.Property 或 Literacy.Field 直接使用Attributes属性访问