一、clr集成了很多種語言,他們之間可以互相訪問,是因為clr建立的標準的類型集、元數據、公共執行環境。
由于各種語言間存在著極大的差別,如區分大小寫,有的不支持unsigned、操作符重載或者參數可變方法,所以想要創建這種讓別的語言能訪問的程序,自己所用的編程語言只能使用其它語言都支持的那些特性。
為了幫助我們更好的做到這一點,microsoft定義一個“公共語言規范(common language specification,cls)”。
二、cts定義了一組語言編譯器必須遵循的規則,以定義、引用、使用和存儲引用類型和值類型。因此,遵循cts在不同語言中編寫的對象才能彼此交互。但并不是所有的類型都可以用于所有的語言。
三、language complile:語言編譯器,每種語言基于.net的語言都會有一個面向clr的托管模塊,也可以理解為語言
編譯器,把對應的語言編譯成msil。
msil:微軟中間語言,clr負責把中間語言編譯成為執行程序的計算機可以理解的語言,是一種介于高級語言和匯編語言的偽匯編語言。
jit(just in-time compile):即時編譯,將msil解釋為程序可以理解的語言。
四、clr的執行模型
1、將源代碼(vb、cs)編譯成托管代碼塊。托管代碼塊有中間語言和元數據組成。
2、將托管代碼合并成程序集,也叫組件(dll)。程序集中包含了一張叫做“清單”的模塊,記錄了構成程序集模塊構成的信息包括資源文件及需要引用自己的信息。
3、加載公共語言運行庫。
4、執行程序集的代碼。
5、生成本地代碼。
五、cli,公共語言基礎架構(common language infrastr)。 cli是一種規范。而clr則是對這種規范的一個實現。
六、bcl,基礎類庫(base class library)
bcl是一個公共變成框架,稱為基類庫,所有語言的開發者都能利用它。是cil(common language infrastructure ture,公共語言基礎結構)的規范之一,主要包括:執行網絡操作,執行i/o操作,安全管理,文本操作,數據庫操作,xml操作,與事件日志交互,跟蹤和一些診斷操作,使用非托管代碼,創建與調用動態代碼等,粒度相對較小,為所有框架提供基礎支持。
七、fcl,框架類庫(framework class library)
fcl提供了大粒度的編程框架,它是針對不同應用的框架,fcl大部分實現都引用了bcl,例如我們常說的開發框
架:asp.net、mvc、wcf和wpf等等,提供了針對不同層面的變成框架。
八、托管代碼與非托管代碼
1、托管代碼就是visual.net和c#編譯器編譯出來的代碼,托管代碼在公共語言運行庫(clr)中運行。
2、非托管代碼是運行在公共語言運行庫環境(clr)的外部,由操作系統直接執行的代碼。非托管代碼必須提供自己的垃圾回收、類型檢查、安全支持等服務。
區別:
1、托管代碼是一種中間語言,運行在clr上;
非托管代碼被編譯為機器碼,運行在機器上。
2、托管代碼獨立于平臺和語言,能更好的實現不同語言平臺之間的兼容;
非托管代碼依賴于平臺和語言。
3、托管代碼可享受clr提供的服務(如安全檢測、垃圾回收等),不需要自己完成這些操作;
非托管代碼需要自己提供安全檢測、垃圾回收等操作。
4、.net有很多非托管的資源,比如streamwriter、timer、數據庫鏈接。
九、非托管代碼unsaft
unsaft可以用來修飾類、類的成員函數、類的全局變量,但不能用來修飾類成員函數內的局部變量,在公共語言運行時(clr)中,不安全代碼是值無法驗證的代碼。c#中的不安全代碼不一定是危險的,只是其安全性無法由clr進行驗證的代碼。因此,clr只對在完全受信任的程序集中的不安全代碼執行操作。如果使用不安全代碼,由您負責確保您的代碼不會引起安全風險或指針錯誤。運行unsaft,需要設置:
1、單擊“配置屬性”文件夾。
2、單擊“生成”屬性頁。
3、修改“允許不安全代碼塊”屬性。
十、垃圾回收gc
1、什么是gc?
gc(garbage collector)如其名,就是垃圾收集,這里僅就內存而言。
2、gc的工作原理:
gc遍歷應用程序在heap(堆)上動態分配的所有對象,通過識別他們是否被引用來確定那些對象是已經死亡的、哪些仍需要被使用,已經不再被應用程序所引用的對象就是已經死亡的對象,即所謂的垃圾,需要被回收。
十一、.net的gc機制兩個問題:
1、首先,gc并不是能釋放所有的資源。它不能自動釋放非托管資源。
2、gc并不是實時性的,這會造成系統性能上的瓶頸和不確定性。所以有了idisposable接口,idisposable接口定義了dispose方法,這個方法用來供程序員顯示調用以釋放非托管資源。使用using語句可以簡化資源管理gc.collect()方法。
作用:強制進行垃圾回收。
十二、什么是元數據?
元數據是一種二進制信息,用以對存儲在公共語言運行庫可移植可執行文件(pe)文件或存儲在內存中的程序進行描述
元數據存儲以下信息: 程序集的說明、類型的說明、屬性。
十三、.net framework 框架體系
十四、.net framework概念回顧
1、il/msil/cil microsoft intermedidte language )微軟中間語言(il是msil的縮寫,譯為中間語言);
2、cts (common type system) 通用類型系統
3、cls (common language specification) 公共語言規范;
4、clr (common language runtime) 公共語言運行時(也由的叫公共語言運行庫);
5、jit (just in time)即時編譯器;
6、cli 公共語言基礎架構(common language infrastructure)
7、bcl 基礎類庫(base class library);
8、fcl 框架類庫(framework class library);
以上就是簡單了解.net framework的詳細內容,更多關于.net framework的資料請關注服務器之家其它相關文章!
原文鏈接:https://www.cnblogs.com/chenyao-1424433719/p/11143296.html