日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

什么是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,什么是反射,二者区别到底是什么?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。