當前位置: 首頁 > 编程资源 > 综合教程 >内容正文 综合教程 什么是Emit,什么是反射,二者区别到底是什么? 發布時間:2023/12/24 综合教程 40 生活家 生活随笔 收集整理的這篇文章主要介紹了 什么是Emit,什么是反射,二者区别到底是什么? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考. Emit的準確定義,我們看看微軟給出的答案 System.Reflection.Emit 命名空間包含{ 允許編譯器或工具發出元數據和發出 Microsoft 中間語言 (MSIL) ,并可選擇在磁盤上生成 PE 文件的類。 這些類的主要客戶端是腳本引擎和編譯器。 } Emit可以直接讓編譯器發出元數據及msil,這樣做的優勢又是什么? MSIL是將.NET代碼轉化為機器語言的一個中間過程。它是一種介于高級語言和基于Intel的匯編語言的偽匯編語言。當用戶編譯一個.NET程序時,編譯器將源代碼翻譯成Microsoft 中間語言 (MSIL),它是一組可以有效地轉換為本機代碼且獨立于CPU的指令。當執行這些指令時,實時(JIT)編譯器將它們轉化為CPU特定的代碼. 所以,我們的.NET程序最終都是以這些中間語言存儲起來的,在運行后,又由即時編譯器直接轉換成真正的機器語言執行. emit這種優勢在于可以在程序動態運行的過程中,直接生成IL運行(可謂靈活且不失高效) 反射的原理及性能問題 引用Jeffrey Richter的一段話: 元數據是用一系列的表來存儲的.生成一個程序集或模塊時,編譯器會創建一個類型定義表、一個字段定義表、一個方法定義表以及其他表.利用反射命名空間(sytem.reflection,所以可知emit是其一個附屬,不是獨立的)中包含的一些類型,可以用代碼來解析(就是所謂的反射)這些元數據表. 反射有兩個缺點:1.反射無法在編譯期間保證類型的安全;2.反射速度慢.(我們需要使用sytem.reflection命名空間中的類型掃描程序集的元數據,反射要不斷地執行字符串的搜索) 總結 反射包含emit,反射性能低原因在于需要掃描程序集或模塊的元數據表.emit性能高,在于能夠動態生成msil立即執行.它們各據其位,所以用emit時其實你就在用反射(至少你需要它).為了提高性能,我們可以動態創建一些方法來達到我們想要的目的(動態代理). (術語有不足之處,希望糾正) 少俠,我看你氣度不凡天賦異稟,骨骼精奇,這么帥,來了就幫推薦一把吧 我的最近更新 最新發布文章、框架、咨詢等,來看看吧 總結 以上是生活随笔為你收集整理的什么是Emit,什么是反射,二者区别到底是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。 如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。 反射 区别 到底是什么 歡迎分享! 轉載請說明來源于"生活随笔",并保留原作者的名字。 本文地址:什么是Emit,什么是反射,二者区别到底是什么? 上一篇: N沟通场效应管深度图解(1)工作原理及M 下一篇: CAD2014复制功能有什么用法