用Emit技术替代反射
使用System.Reflection.Emit命名空间类在可以编译时创建代码,但前提是必须懂IL代码。(本文不做IL代码详解,因为我也不会。。。)事实上,你实际编写的是就是幕后的MSIL本身。你可以使用反射在内存中定义程序集,为该程序集创建类/模块,然后为该模块创建其他模块成员和新类型。你同样也可以使用Emit来构造程序集。Reflection.Emit是一个强大的命名空间,我们可以在运行时动态地发出瞬态和持久化程序集。Reflection.Emit产生一个低级,语言中立的MSIL。通常,我们通过将源代码保存到磁盘然后编译该源代码来创建程序集,然后我们调用我们需要从该程序集中使用的类的方法,该程序集是在磁盘上编译的。但是你可以想象,这涉及额外的磁盘写入和读取工作!使用反射生成代码,我们可以省略此开销并立即将操作代码直接发送到内存中。反射发射只不过是直接在代码中编写任何汇编代码,然后即时调用生成的代码。这也并不是说反射效率就是高,因为在运行期产生指令也是需要时间,各有优缺点。
System.Reflection.Emit命名空间提供用户动态创建.exe文件所需的类。它的类允许编译器或工具发出元数据和MSIL。因此,您可以动态地在磁盘上创建.exe文件,就像运行代码,保存代码并调用编译器来编译代码一样。大多数情况下,您需要此功能和此命名空间用于自定义脚本引擎和编译器。
Reflection.Emit命名空间有许多可用于重要的的类。以下是两个最重要的:
AssemblyBuilder类是在运行时发出代码并具有创建动态模块的方法的任何应用程序的起点。
ModuleBuilder类用作在运行时向动态程序集添加类和结构等类型的起点。
生成MSIL指令的ILGenerator.OpCodes类包括其所需字段中的所有IL指令。MSIL是CLR或中间语言的基本汇编语言的无类型操作代码。当您编写任何C#代码并对其进行编译时,它将首先转换为MSIL。然后,当您在MSIL中调用程序集时,它将以相应的机器语言进行转换和执行。学习MSIL的最简单方法是反汇编您编译的简单代码。您可以使用.NET SDK实用程序之一ILDasm.exe(IL反汇编程序)在Vs插件库下载即可,来反汇编任何已编译的.NET代码。
用Emit技术替代反射相关推荐
- 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截...
程序猿修仙之路--数据结构之你是否真的懂数组? 数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构 .要想在之后的江湖历练中通关,数据结构必不可少.数据 ...
- 替代反射调用的几种方式及性能测试
园子里和这个话题的相关文章比较多,本文是旧话重提,外加个小的总结.主要因为近期看到很多同事.朋友都已经使用 VS2012 进行 .NET 4.5 开发了,却还在大量使用反射,不知道用新的方式.或有所了 ...
- RFID技术有这7种缺点与不足,ZETA是否可以对其进行技术替代?
RFID(Radio Frequency Identification)技术,又称无线射频识别,是一种用途广泛的通信技术,可通过无线电讯号识别特定目标并读写相关数据,而无需识别系统与特定目标之间建立机 ...
- 详解c# Emit技术
我们常常有一个应用场景,由我们的C#代码,动态生成一个EXE,其应用场景可以非常多,比如软件授权,可以输入授权信息后,生成一个授权的DLL等,那如何实现这个功能呢,就要提到一个技术Emit. 1.Em ...
- 工行智能客服服务量突破1.7亿笔;迪拜机场拟用人脸识别技术替代护照检查
韩国防部:计划于2025年前将人工智能投入野战运营 雷锋网 AI 掘金志消息,据韩联社10月9日报道,韩国国防部消息人士当天表示,军方计划到2025年研发人工智能,并将其投入到野战部队的实战运营中. ...
- Android APP热更新中的插件化(Hook技术:反射或动态代理),Demo (2)
修改AAPT,资源分区,用于Android插件化- https://github.com/BaoBaoJianqiang/AAPT -- Android下的挂钩(hook)和代码注入(inject) ...
- java反射技术_java反射技术,逆向开发必备技能
相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解APT替代了, ...
- php的反射技术,PHP 反射使用
上一节 主要系统讲了反射的用法,虽然讲解了用法,但是没有对其在项目中的实际使用做讲解,不学以致用,不如不学. 在好多框架底层实现上面使用了反射,所以要理解和分析框架底层源码的话,必须掌握反射,不然的话 ...
- bat 调用class文件_拯救写框架的程序员!用字节码替代反射,实现任意函数调用...
作者 | 阿里巴巴文娱高级开发工程师 兰摧 技术类别:JAVA,后端技术,中间件开发,框架开发 技术亮点:字节码实现类似反射的功能,速度接近JAVA原生的调用 一.背景 我们在写一些框架或者中间件时, ...
最新文章
- 3.Chrome数据同步服务分析--server一片
- C#关于参数为null(空值)的方法调用,重载顺序选择彻底研究
- 【LaTeX】E喵的LaTeX新手入门教程(1)准备篇
- ubuntu查看gpu使用率_如何监控GPU卡的使用率(Linux)
- P4062 [Code+#1]Yazid 的新生舞会(区间绝对众数+分治/树状数组维护高维前缀和)
- 【bfs】廉价最短路径(2013特长生 T4)
- LAMP搭建discuz
- 电脑端的mafsvr服务关掉_网吧才是电脑优化的精髓!学会3招你也不用羡慕网吧的流畅了...
- java vc_vc++与 java有什么不同
- asp.net数据库连接web.config配置
- 计算机读研云计算,快来看看2022云计算考研专业有哪些?
- 数字电路基础知识——组合逻辑电路(数据选择器MUX、多路复用器)
- 海思3518C 4G模块移植及运用
- 计算机计费管理系统,中央空调时间型计费管理系统-中央空调计费系统
- oracle startup mount是什么意思,startup,startup mount,startup nomount之间的区别-Oracle
- 看看老毛子士兵干的事情!
- Android移动开发的几种方式
- ArcEngine中的ICommand接口和ITool接口
- 以编程会安全,以安全辅未来——2017看雪安全开发者峰会 强势来袭!
- 微博粉丝、关注批量删除
热门文章
- Python Pycharm Anacanda 区别
- jq之callback
- android面试service,Android面试,与Service交互方式(4)
- 【C语言基础】C语言异常捕获机制 - setjmp
- 的表格点击全选_“逼死”强迫症的杂乱表格,原来3秒就能整理好!(必学)...
- js简易计算机代码if语句,简单学习下JS里的if语句的写法
- oracle olap报告,10g部署oracle olap组件
- php 其他页面获取session_PHP五十个提升执行效率的小技巧,和常见问题
- 计算机专业知识多选题证监会,2019年国家公务员考试中国证监会(计算机类)专业科目考试大纲...
- oppo计算机的夜间模式,oppo夜间模式如何打开