亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

CLRviaC#深解筆記一-CLR&C#基礎概念

2019-11-14 13:39:31
字體:
來源:轉載
供稿:網友
寫在前言
 
.Net Framework并不是Win 32 API 和COM上的一個抽象層。
 
某種程度上,它是自己的操作系統,有自己的內存管理器,自己的安全系統,自己的文件加載器,自己的錯誤處理機制,自己的應用程序隔離邊界(AppDomains),自己的線程處理模型等。
隨著多核計算機越來越普遍,線程處理,并發執行,并行結構,同步等方面的重要性日益凸顯。
 
CLR的執行模型
 
公共語言運行時 CLR Common Language Runtime
是一個運行時環境,保證應用和底層操作系統之間必要的分離,是.NET Framework的主要執行引擎。是可由面向CLR的多種編程語言使用的“運行時”。CLR的核心功能(內存管理、程序集加載、安全性、異常處理和線程同步等)由面向CLR的所有語言使用。CLR不關心開發人員使用哪一種語言來寫源代碼。也就是說挑選編程語言時,應該選擇最容易表達自己意圖的語言。理論上,可以用任何語言編寫代碼,只要編譯器是面向CLR的就可以了。
 
編譯器
可以視為語法檢查器和“正確代碼”的分析器。它們檢查源代碼,確定你寫的一切都有意義,然后輸出對你的意圖進行描述的代碼。不同的編程語言,有著不同的語法。不要低估這個選擇的價值,也許會節省大量的開發時間。
Microsoft已經創建好幾個面向“運行時”的語言編譯器,包括:C++/CLI、C# (C sharp)、Visual Basic、F#、Iron Python、Iron Ruby以及一個“中間語言”(Intermediate Language, IL)匯編器。
 
IL代碼 (托管代碼)
本地代碼編譯器是面向特定CPU架構的代碼。而每個面向CLR的編譯器生成的都是IL代碼 (中間語言代碼 。IL代碼有時稱為托管代碼,因為CLR要管理它的執行。它明顯的優勢在于它是CPU無關的。
 
元數據
IL代碼由面向CLR的編譯器產生,但它并不是編譯器產生的提供給運行時僅有的東西。編譯器同樣產生有關原始代碼的元數據。它提供給CLR關于代碼更多的東西,例如:各種類型的定義、各種類型成員的簽名以及其他數據。基本上,元數據是類型庫、注冊表內容和其它用于COM的信息。盡管如此,元數據還是直接和執行代碼合并在一起,并不處在 隔離的位置。
簡單地說,元數據是整個microsoft .net framework開發平臺的關鍵,它實現了編程語言、類型和對象的無縫集成。
 
程序集 (assembly)
一個抽象的概念。首先,他是一個或多個模塊/資源文件的邏輯性分組。其次,程序集是重用、安全性以及版本控制的最小單元。取決于你對編譯器或者工具的選擇,即可以生成單文件程序集,也可以生成多文件程序集。在CLR的世界中,程序集相當于一個“組件”。利用“程序集”這個概念性的東西,可以將一組文件當成一個單獨的實體來對待。
對于一個可重用的、可保護的、可版本控制的組件,程序集把它的邏輯表示和物理表示分開。具體如何將代碼和資源劃分到不同的文件中,完全取決于個人。程序集的模塊中,還包含與引用的程序集有關的信息。這些信息使程序集能夠自描述(self-describing)。換句話說,CLR能夠判斷出為了執行程序集中代碼,程序集的直接依賴對象(immediate dependency)是什么。
 
托管程序集同時包含元數據IL。IL是與CPU無關的機器語言,是Microsoft在請教了外面的幾個商業及學術性語言/編譯器的作者之后,費勁心思開發出來的。IL比大多數CPU機器語言都要高級。IL能訪問和操作對象類型,并提供了指令來創建和初始化對象,調用對象上的虛方法以及直接操作數據元素。甚至可以提供拋出和捕捉異常的指令來實現錯誤處理??蓪?span style="text-decoration: underline;">IL視為一種面向對象的機器語言。
 
重要的提示:
允許在不同編程語言之間方便地切換,同時又保持緊密集成,這事CLR的一個非常出色的特性。遺憾的是,許多開發人員都忽視了這一特性。例如,C#和Visual Basic等語言能很多地執行I/O操作,APL語言能很好地執行高級工程或者金融計算。通過CLR,應用程序的I/O部分可用C#編寫,工程計算部分則換用APL編寫。CLR在這些語言之間提供了其他技術無法媲美的集成度,使“混合語言編程”成為許多開發項目的一個值得慎重考慮的選擇。
 
執行一個方法,首先必須把它的IL轉換成本地CPU指令,這是CLR的JIT (just-in-time或者“即時”)編譯器的職責。JITCompiler 是CLR的一個組件,稱為JITer 或者JIT編譯器。它在定義(某一個類型)程序集的元數據中查找被調用的方位的IL, 接著驗證IL代碼,并將IL代碼編譯成本地CPU指令。本地CPU指令被保存到一個動態分配的內存塊中。
 
 
 
一個方法只有在首次調用時才會造成一些性能損失。以后對該方法的所有調用都以本地代碼的形式全速運行,無需重新驗證IL并把它編譯成本地代碼。
 
JIT編譯器將本地CPU指令存儲到動態內存中,一旦應用程序終止,編譯好的代碼也會被丟棄。所以,如果將來再次運行應用程序,或者同時啟動應用程序的兩個實例(使用兩個不同的操作系統進程),JIT編譯器必須再次將IL編譯成本地指令。
對于大多數應用程序來說,因JIT編譯器造成的性能損失并不顯著。大多數應用程序都會反復調用相同的方法。在應用程序運行期間,這些方法只會對性能造成一次性的影響。另外,在方法內部花費的時間很有可能比花在調用方法上的時間多得多。
 
 
還需要特別注意的是:
CLR的JIT編譯器會對代碼進行優化,這類似于非托管的C++編譯器的后端所做的工作。同樣地,可能花費較多的時間來生成優化的代碼。優化之后的代碼將獲得更加出色的性能。
非托管的飯嗎是針對一種具體的CPU平臺編譯的,一旦調用,代碼直接就能執行。但是在托管環境中,代碼的編譯是分成兩個階段完成的。首先,編譯器遍歷源代碼,做盡可能多的工作來生成IL代碼,而為了真正的執行調用,這些IL代碼本身必須在運行時編譯成本地CPU指令,這需要分配更多的內存,并需要花費額外的CPU的時間。實踐確實表明,運行時發生的第二個編譯階段會影響性能,會分配動態內存。但是,Microsoft進行了大量性能優化的工作,將這些額外的開銷保持在最低限度。
 
IL和驗證
IL是基于棧的。由于IL沒有提供操作寄存器的指令,所以人們可以很容易的創建新的語言和編譯器,生成面向CLR的代碼。
IL指令還是“無類型”(typeless)的。例如,IL提供了一個add指令,它的作用是將壓入棧的最后兩個操作數加到一起。add指令不分32位和64位版本。
IL的亮點是它對底層CPU的抽象,但這并非它的最大優勢。IL提供的最大的優勢在于應用程序的健壯性和安全性。將IL編譯成本地CPU指令時,CLR會執行一個名為驗證(verification)的過程,這個過程會檢查高級IL代碼,確定代碼所做的一切都是安全的。如,驗證會核實調用的每個方法多有正確數量的參數,傳給每個方法的參數都具有正確的類型,每個方法的返回值都得到了正確的使用,每個方法都具有一個返回語句等等。在托管模塊的元數據中,包含了要由驗證過程使用的所有方法和類型信息。
 
 
將每個windows進程都放到一個獨立的地址空間,將獲得健壯性和穩定性,一個進程無法干擾另一個進程。通過驗證 托管代碼,確保代碼不會不正確的訪問內存,不會干擾到另一個應用程序的代碼。這樣一來,就可以放心地將多個托管應用程序放到一個Windoes虛擬地址空間中運行。
CLR提供了在 一個操作系統進程中執行多個托管應用程序的能力。每個托管的應用程序都在一個AppDomain中執行。默認情況下,每個托管的exe文件都在它自己的獨立地址空間中運行,這個地址空間只有一個AppDomain。然而,CLR的宿主進程(比如IIS或者MS SQL Server)  可決定在單個操作系統進程中運行多個AppDomain。
 
通用類型系統
CLR是完全圍繞類型展開的,這一點到現在為止應該很明顯了。類型為應用程序和其他類型公開了功能。通過類型,用一種編程語言寫的代碼能與另一種語言寫的代碼溝通。由于類型是CLR的根本,所以Microsoft指定了一個正式的規范,叫做“通用類型系統”(Common Type System, CTS), 描述類型定義和行為。利用了CTS指定的規則,程序集為一個類型建立了可視邊界,CLR則強制(貫徹)了這些規則。
 
事實上,并不需要去學習CTS規則本省,你選擇的語言會采用你熟悉的公式公開它自己的語言語法與類型規則。通過編譯來生成程序集時,它會將語言特有的語法映射到IL -- 也就是CLR的“語言”。
 
CLR讓我們意識到:“代碼的語言”和“代碼的行為”。不同語言可以定義系統的類型,添加相同的成員,語法有不同,但是類型的行為都是完全一致的,因為最終由CLR的CTS來定義類型的行為。
 
 
--------------------------------------------------------------------
 
 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
奇米影视亚洲狠狠色| 在线视频免费一区二区| 亚洲新声在线观看| 91av在线免费观看| 欲色天天网综合久久| 亚洲国产欧美一区二区丝袜黑人| 久久久久久久国产精品视频| 2018国产精品视频| 亚洲国产欧美一区| 777国产偷窥盗摄精品视频| 高清欧美性猛交xxxx黑人猛交| 欧美激情伊人电影| 欧美精品日韩三级| 日本国产一区二区三区| 久99久在线视频| 国产精品美女主播| 亚洲va久久久噜噜噜| 欧美韩日一区二区| 国产精品免费观看在线| 91人人爽人人爽人人精88v| 538国产精品一区二区免费视频| 日韩精品中文字幕在线播放| 国产精品69久久| 人人澡人人澡人人看欧美| 久久人人爽人人爽人人片av高清| 成人激情黄色网| 久久婷婷国产麻豆91天堂| 91国偷自产一区二区三区的观看方式| 91免费福利视频| 97在线免费视频| 日本一区二区不卡| 热久久这里只有精品| www.99久久热国产日韩欧美.com| 欧美日韩在线视频一区二区| 成人在线视频福利| 国产日韩视频在线观看| 亚洲人成在线一二| 欧美激情aaaa| 羞羞色国产精品| 精品视频久久久久久| 欧美激情精品久久久久久黑人| 久久99青青精品免费观看| 久久久久久国产精品| 国产一区二区黑人欧美xxxx| 久久综合亚洲社区| 亚洲天堂成人在线| 欧美精品激情视频| 国产精品久久在线观看| 日韩最新在线视频| 成人久久一区二区| 一本色道久久88综合日韩精品| 欧美影院成年免费版| 亚洲欧美日本伦理| 亚洲人成自拍网站| 日韩福利视频在线观看| 国产精品白嫩美女在线观看| 91在线观看免费高清完整版在线观看| 亚洲精品视频免费在线观看| 亚洲一区二区中文| 日韩hd视频在线观看| 日韩理论片久久| 久久777国产线看观看精品| 欧美一级淫片videoshd| 欧洲午夜精品久久久| 欧美性感美女h网站在线观看免费| 国产丝袜高跟一区| 日韩高清电影免费观看完整| 色99之美女主播在线视频| 亚洲国产成人爱av在线播放| 久久天天躁夜夜躁狠狠躁2022| 国产精品久久久久久久久久尿| 欧美多人爱爱视频网站| 亚洲xxxx妇黄裸体| 亚洲一二在线观看| 日韩福利视频在线观看| 国产精品678| 日韩精品中文字幕视频在线| 成人免费午夜电影| 91av视频在线免费观看| 欧美午夜女人视频在线| 精品福利一区二区| 国产日韩精品在线播放| 色琪琪综合男人的天堂aⅴ视频| 国产精品入口日韩视频大尺度| 黄色91在线观看| 欧美极品美女视频网站在线观看免费| 国产丝袜精品视频| 97在线视频精品| 国产欧美中文字幕| 久久视频免费观看| 久久久av亚洲男天堂| 欧美性感美女h网站在线观看免费| 久久av中文字幕| 亚洲一区二区免费| 亚洲最大福利视频| 影音先锋欧美在线资源| 国精产品一区一区三区有限在线| 欧美激情国产日韩精品一区18| 国产成人精品在线观看| 亚洲a在线观看| 69av在线播放| 国产a级全部精品| 91久久精品久久国产性色也91| 欧美激情亚洲国产| 亚洲伊人成综合成人网| 欧美性生交大片免费| 欧美超级免费视 在线| 欧美日韩国产精品一区二区三区四区| 日韩va亚洲va欧洲va国产| 国产一级揄自揄精品视频| 国产女精品视频网站免费| 成人激情av在线| 久久久欧美一区二区| 国产91在线高潮白浆在线观看| 欧美一区二区三区免费观看| 亚洲国产精品久久| 久久久久久久香蕉网| 欧美性做爰毛片| 在线亚洲国产精品网| 久久久999精品免费| 日本亚洲欧美成人| 欧美成人午夜剧场免费观看| 精品国产老师黑色丝袜高跟鞋| 色先锋久久影院av| 国产不卡视频在线| 欧美成人在线免费| 精品久久久久久久久久久久久久| 久久久久久久亚洲精品| 7777精品视频| 国产91精品久久久| 中文字幕亚洲无线码在线一区| 亚洲综合小说区| 日韩欧美一区二区三区| 91精品国产综合久久香蕉最新版| 亚洲成人久久网| 2019精品视频| 亚洲精品97久久| 91理论片午午论夜理片久久| 亚洲天堂2020| 亚洲xxx自由成熟| 成人h视频在线观看播放| 久久夜色精品亚洲噜噜国产mv| 欧美性色xo影院| 亚洲精品不卡在线| 欧美激情aaaa| 精品国产欧美一区二区五十路| 国产精品一久久香蕉国产线看观看| 久热精品视频在线观看一区| 国产精品96久久久久久| 亚洲人a成www在线影院| 国产日韩精品视频| 国产精品爽黄69天堂a| 国产精品扒开腿做| 视频直播国产精品| 影音先锋日韩有码| 欧美疯狂做受xxxx高潮| 久久夜色精品国产亚洲aⅴ| 日韩福利视频在线观看| 丝袜亚洲另类欧美重口| 国产亚洲视频在线观看| 国产午夜精品美女视频明星a级| 欧美华人在线视频| 日韩电影中文字幕一区| 国产精品久久久久久久久久东京|