簡(jiǎn)單了解.NET Framework
一、CLR集成了很多種語(yǔ)言,他們之間可以互相訪(fǎng)問(wèn),是因?yàn)镃LR建立的標(biāo)準(zhǔn)的類(lèi)型集、元數(shù)據(jù)、公共執(zhí)行環(huán)境。
由于各種語(yǔ)言間存在著極大的差別,如區(qū)分大小寫(xiě),有的不支持unsigned、操作符重載或者參數(shù)可變方法,所以想要?jiǎng)?chuàng)建這種讓別的語(yǔ)言能訪(fǎng)問(wèn)的程序,自己所用的編程語(yǔ)言只能使用其它語(yǔ)言都支持的那些特性。
為了幫助我們更好的做到這一點(diǎn),Microsoft定義一個(gè)“公共語(yǔ)言規(guī)范(Common Language Specification,CLS)”。
二、CTS定義了一組語(yǔ)言編譯器必須遵循的規(guī)則,以定義、引用、使用和存儲(chǔ)引用類(lèi)型和值類(lèi)型。因此,遵循CTS在不同語(yǔ)言中編寫(xiě)的對(duì)象才能彼此交互。但并不是所有的類(lèi)型都可以用于所有的語(yǔ)言。
三、Language Complile:語(yǔ)言編譯器,每種語(yǔ)言基于.net的語(yǔ)言都會(huì)有一個(gè)面向CLR的托管模塊,也可以理解為語(yǔ)言
編譯器,把對(duì)應(yīng)的語(yǔ)言編譯成MSIL。
MSIL:微軟中間語(yǔ)言,CLR負(fù)責(zé)把中間語(yǔ)言編譯成為執(zhí)行程序的計(jì)算機(jī)可以理解的語(yǔ)言,是一種介于高級(jí)語(yǔ)言和匯編語(yǔ)言的偽匯編語(yǔ)言。
JIT(Just In-Time Compile):即時(shí)編譯,將MSIL解釋為程序可以理解的語(yǔ)言。
四、CLR的執(zhí)行模型
1、將源代碼(vb、cs)編譯成托管代碼塊。托管代碼塊有中間語(yǔ)言和元數(shù)據(jù)組成。
2、將托管代碼合并成程序集,也叫組件(dll)。程序集中包含了一張叫做“清單”的模塊,記錄了構(gòu)成程序集模塊構(gòu)成的信息包括資源文件及需要引用自己的信息。
3、加載公共語(yǔ)言運(yùn)行庫(kù)。
4、執(zhí)行程序集的代碼。
5、生成本地代碼。
五、CLI,公共語(yǔ)言基礎(chǔ)架構(gòu)(Common Language Infrastr)。 CLI是一種規(guī)范。而CLR則是對(duì)這種規(guī)范的一個(gè)實(shí)現(xiàn)。
六、BCL,基礎(chǔ)類(lèi)庫(kù)(Base Class Library)
BCL是一個(gè)公共變成框架,稱(chēng)為基類(lèi)庫(kù),所有語(yǔ)言的開(kāi)發(fā)者都能利用它。是CIL(Common Language Infrastructure ture,公共語(yǔ)言基礎(chǔ)結(jié)構(gòu))的規(guī)范之一,主要包括:執(zhí)行網(wǎng)絡(luò)操作,執(zhí)行I/O操作,安全管理,文本操作,數(shù)據(jù)庫(kù)操作,XML操作,與事件日志交互,跟蹤和一些診斷操作,使用非托管代碼,創(chuàng)建與調(diào)用動(dòng)態(tài)代碼等,粒度相對(duì)較小,為所有框架提供基礎(chǔ)支持。
七、FCL,框架類(lèi)庫(kù)(Framework Class Library)
FCL提供了大粒度的編程框架,它是針對(duì)不同應(yīng)用的框架,F(xiàn)CL大部分實(shí)現(xiàn)都引用了BCL,例如我們常說(shuō)的開(kāi)發(fā)框
架:ASP.NET、MVC、WCF和WPF等等,提供了針對(duì)不同層面的變成框架。
八、托管代碼與非托管代碼
1、托管代碼就是Visual.NET和C#編譯器編譯出來(lái)的代碼,托管代碼在公共語(yǔ)言運(yùn)行庫(kù)(CLR)中運(yùn)行。
2、非托管代碼是運(yùn)行在公共語(yǔ)言運(yùn)行庫(kù)環(huán)境(CLR)的外部,由操作系統(tǒng)直接執(zhí)行的代碼。非托管代碼必須提供自己的垃圾回收、類(lèi)型檢查、安全支持等服務(wù)。
區(qū)別:
1、托管代碼是一種中間語(yǔ)言,運(yùn)行在CLR上;
非托管代碼被編譯為機(jī)器碼,運(yùn)行在機(jī)器上。
2、托管代碼獨(dú)立于平臺(tái)和語(yǔ)言,能更好的實(shí)現(xiàn)不同語(yǔ)言平臺(tái)之間的兼容;
非托管代碼依賴(lài)于平臺(tái)和語(yǔ)言。
3、托管代碼可享受CLR提供的服務(wù)(如安全檢測(cè)、垃圾回收等),不需要自己完成這些操作;
非托管代碼需要自己提供安全檢測(cè)、垃圾回收等操作。
4、.Net有很多非托管的資源,比如StreamWriter、Timer、數(shù)據(jù)庫(kù)鏈接。
九、非托管代碼Unsaft
Unsaft可以用來(lái)修飾類(lèi)、類(lèi)的成員函數(shù)、類(lèi)的全局變量,但不能用來(lái)修飾類(lèi)成員函數(shù)內(nèi)的局部變量,在公共語(yǔ)言運(yùn)行時(shí)(CLR)中,不安全代碼是值無(wú)法驗(yàn)證的代碼。C#中的不安全代碼不一定是危險(xiǎn)的,只是其安全性無(wú)法由CLR進(jìn)行驗(yàn)證的代碼。因此,CLR只對(duì)在完全受信任的程序集中的不安全代碼執(zhí)行操作。如果使用不安全代碼,由您負(fù)責(zé)確保您的代碼不會(huì)引起安全風(fēng)險(xiǎn)或指針錯(cuò)誤。運(yùn)行Unsaft,需要設(shè)置:
1、單擊“配置屬性”文件夾。
2、單擊“生成”屬性頁(yè)。
3、修改“允許不安全代碼塊”屬性。
十、垃圾回收GC
1、什么是GC?
GC(Garbage Collector)如其名,就是垃圾收集,這里僅就內(nèi)存而言。
2、GC的工作原理:
GC遍歷應(yīng)用程序在Heap(堆)上動(dòng)態(tài)分配的所有對(duì)象,通過(guò)識(shí)別他們是否被引用來(lái)確定那些對(duì)象是已經(jīng)死亡的、哪些仍需要被使用,已經(jīng)不再被應(yīng)用程序所引用的對(duì)象就是已經(jīng)死亡的對(duì)象,即所謂的垃圾,需要被回收。
十一、.NET的GC機(jī)制兩個(gè)問(wèn)題:
1、首先,GC并不是能釋放所有的資源。它不能自動(dòng)釋放非托管資源。
2、GC并不是實(shí)時(shí)性的,這會(huì)造成系統(tǒng)性能上的瓶頸和不確定性。所以有了IDisposable接口,IDisposable接口定義了Dispose方法,這個(gè)方法用來(lái)供程序員顯示調(diào)用以釋放非托管資源。使用using語(yǔ)句可以簡(jiǎn)化資源管理GC.Collect()方法。
作用:強(qiáng)制進(jìn)行垃圾回收。
十二、什么是元數(shù)據(jù)?
元數(shù)據(jù)是一種二進(jìn)制信息,用以對(duì)存儲(chǔ)在公共語(yǔ)言運(yùn)行庫(kù)可移植可執(zhí)行文件(PE)文件或存儲(chǔ)在內(nèi)存中的程序進(jìn)行描述
元數(shù)據(jù)存儲(chǔ)以下信息: 程序集的說(shuō)明、類(lèi)型的說(shuō)明、屬性。
十三、.NET Framework 框架體系
十四、.NET Framework概念回顧
1、IL/MSIL/CIL Microsoft Intermedidte Language )微軟中間語(yǔ)言(IL是MSIL的縮寫(xiě),譯為中間語(yǔ)言);
2、CTS (Common Type System) 通用類(lèi)型系統(tǒng)
3、CLS (Common Language Specification) 公共語(yǔ)言規(guī)范;
4、CLR (Common Language Runtime) 公共語(yǔ)言運(yùn)行時(shí)(也由的叫公共語(yǔ)言運(yùn)行庫(kù));
5、JIT?。↗ust in Time)即時(shí)編譯器;
6、CLI 公共語(yǔ)言基礎(chǔ)架構(gòu)(Common Language Infrastructure)
7、BCL 基礎(chǔ)類(lèi)庫(kù)(Base Class Library);
8、FCL 框架類(lèi)庫(kù)(Framework Class Library);
以上就是簡(jiǎn)單了解.NET Framework的詳細(xì)內(nèi)容,更多關(guān)于.NET Framework的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 基于Jenkins搭建.NET FrameWork持續(xù)集成環(huán)境
- .NET Core/Framework如何創(chuàng)建委托大幅度提高反射調(diào)用的性能詳解
- Windows Server 2012 R2或2016無(wú)法安裝.NET Framework 3.5.1的解決方法
- .NET framework 4.0 安裝失敗回滾問(wèn)題
- 安裝.NET Framework進(jìn)度條卡住不動(dòng)的解決方案(推薦)
- 基于.net standard 的動(dòng)態(tài)編譯實(shí)現(xiàn)代碼
- Visual Studio 2017創(chuàng)建.net standard類(lèi)庫(kù)編譯出錯(cuò)原因及解決方法
- .Net Framework .Net .NET Standard的概念及區(qū)別
相關(guān)文章
DataGridView自動(dòng)調(diào)整行高和行寬
根據(jù)數(shù)據(jù)內(nèi)容自動(dòng)調(diào)整列寬,根據(jù)數(shù)據(jù)內(nèi)容自動(dòng)調(diào)整行高2009-04-04.NET?Core部署為Windows服務(wù)的詳細(xì)步驟
這篇文章主要介紹了.NET?Core部署為Windows服務(wù),想要將.NET?Core部署為window服務(wù),項(xiàng)目中需要進(jìn)行以下配置:項(xiàng)目中引入Microsoft.Extensions.Hosting.WindowsServices包,本文給大家詳細(xì)講解,需要的朋友可以參考下2022-10-10.NET分頁(yè)控件簡(jiǎn)單學(xué)習(xí)
這篇文章主要為大家詳細(xì)介紹了.NET分頁(yè)控件的制作方法和實(shí)現(xiàn)原理,感興趣的小伙伴們可以參考一下2016-08-08淺談ASP.NET常用數(shù)據(jù)綁定控件優(yōu)劣總結(jié)
這篇文章主要介紹了淺談ASP.NET常用數(shù)據(jù)綁定控件優(yōu)劣總結(jié),以便在實(shí)際的開(kāi)發(fā)中選用合適的控件進(jìn)行數(shù)據(jù)綁定,以提高開(kāi)發(fā)效率。2016-12-12.net 動(dòng)態(tài)標(biāo)題實(shí)現(xiàn)方法
.net 實(shí)現(xiàn)動(dòng)態(tài)標(biāo)題方法,需要的朋友可以參考下。2009-11-11asp.net ajaxControlToolkit FilteredTextBoxExtender的簡(jiǎn)單用法
最近寫(xiě)的東西驗(yàn)證比較多,尤其是數(shù)字驗(yàn)證,無(wú)意中發(fā)現(xiàn)這個(gè)控件,有點(diǎn)兒意思。記錄一下2008-11-11.NET framework 4.0 安裝失敗回滾問(wèn)題
這篇文章主要介紹了.NET framework 4.0 安裝失敗回滾問(wèn)題,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12