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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > C# >内容正文

C#

C#基础教程(一).NET框架

發(fā)布時(shí)間:2023/12/14 C# 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C#基础教程(一).NET框架 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、.NET

是由微軟開發(fā),一個(gè)致力于敏捷軟件開發(fā)、快速應(yīng)用開發(fā)、平臺(tái)無關(guān)性和網(wǎng)絡(luò)透明化的軟件開發(fā)平臺(tái)。.NET框架是以一種采用系統(tǒng)虛擬機(jī)運(yùn)行的編程平臺(tái),以通用語言運(yùn)行庫(Common Language Runtime)為基礎(chǔ),支持多種語言(C#、VB.NET、C++、Python等)的開發(fā)。比如Python,可以借助微軟提供的開源工具,即?IronPython,可以在C#中直接調(diào)用Python類庫函數(shù),Python會(huì)編譯成CIL(又稱MSIL,CL,以下就稱CIL)

二、CLR

CLR即公共語言運(yùn)行時(shí)(Common Language Runtime,簡(jiǎn)稱CRL),就是微軟為.net產(chǎn)品構(gòu)建的運(yùn)行環(huán)境,與java的JVM類似,通俗的講就是.net虛擬機(jī)。CLR上實(shí)際運(yùn)行的并不是我們通常所用的編程語言(例如C#、VB等),而是一種字節(jié)碼形態(tài)的"中間語言"。這意味著只要能將代碼編譯成這種特定的"中間語言"(MSIL),任何語言的產(chǎn)品都能運(yùn)行在CLR上。CLR通常被運(yùn)行在Windows系統(tǒng)上,但是也有一些非Windows的版本。這意味著.Net也很容易實(shí)現(xiàn)"跨平臺(tái)"。CLR是.net系列產(chǎn)品運(yùn)行的基礎(chǔ)。

三、托管代碼/非托管代碼與托管資源/非托管資源

定義:Common Intermediate Language,公共中間語言。

托管代碼

托管代碼是在公共語言運(yùn)行庫中運(yùn)行的代碼,托管代碼的執(zhí)行由公共語言運(yùn)行庫來直接控制,而不是操作系統(tǒng)來直接控制。具體而言,由公共語言運(yùn)行庫中的代碼管理器來控制和執(zhí)行托管代碼,而公共語言運(yùn)行庫的其他部分會(huì)提供托管代碼執(zhí)行時(shí)所需要的各種服務(wù),如垃圾回收、類型檢查、安全支持等。托管代碼不是源碼,是CIL,遵守公共語言規(guī)則的語言都可以編譯成CIL,比如C++,Phython,前提在微軟特定工程和特定IDE,編譯方法肯定與源語言沒跨平臺(tái)之前編譯不同。

非托管代碼

非托管代碼是在托管代碼的概念出現(xiàn)后相對(duì)于托管代碼而言的,其實(shí)際上是計(jì)算機(jī)操縱系統(tǒng)可識(shí)別的機(jī)器碼。非托管代碼(機(jī)器碼)的執(zhí)行由操作系統(tǒng)來控制,其在執(zhí)行時(shí)也需要各種服務(wù),如垃圾回收、類型檢查、安全支持等。由于沒有像公共語言運(yùn)行庫這樣的東西會(huì)自動(dòng)給你提供服務(wù),所以你需要自己提供這些服務(wù),也就說你要寫額外的代碼來實(shí)現(xiàn)垃圾回收等功能。非托管代碼比如在C#中直接調(diào)用c++dl,那么c++那部分直接編譯成機(jī)器語言直接交給計(jì)算機(jī)系統(tǒng)去運(yùn)作。

托管資源

  與托管代碼密切相關(guān)的是托管資源。托管資源是由公共語言運(yùn)行的垃圾回收器進(jìn)行分配和釋放的數(shù)據(jù)。默認(rèn)情況下,C#、VisualBasic和JScript.NET數(shù)據(jù)是托管資源。不過,通過使用特殊的關(guān)鍵字,C#數(shù)據(jù)可以被標(biāo)記為非托管資源。VisualC++數(shù)據(jù)在默認(rèn)情況下是非托管數(shù)據(jù),即使在使用/CLR開關(guān)時(shí)也不是托管的。

  關(guān)于托管資源,就不用說了,像簡(jiǎn)單的int,string,float,DateTime等等,.net中超過80%的資源都是托管資源。

非托管資源

  對(duì)于非托管資源,您在應(yīng)用程序中使用完這些非托管資源之后,必須顯示的釋放他們,例如System.IO.StreamReader的一個(gè)文件對(duì)象,必須顯示的調(diào)用對(duì)象的Close()方法關(guān)閉它,否則會(huì)占用系統(tǒng)的內(nèi)存和資源,而且可能會(huì)出現(xiàn)意想不到的錯(cuò)誤。

  最常見的一類非托管資源就是包裝操作系統(tǒng)資源的對(duì)象,例如文件,窗口或網(wǎng)絡(luò)連接,對(duì)于這類資源雖然垃圾回收器可以跟蹤封裝非托管資源的對(duì)象的生存期,但它不了解具體如何清理這些資源。還好.netFramework提供了Finalize()方法,它允許在垃圾回收器回收該類資源時(shí),適當(dāng)?shù)那謇矸峭泄苜Y源。如果在MSDNLibrary中搜索Finalize將會(huì)發(fā)現(xiàn)很多類似的主題,這里列舉幾種常見的非托管資源:ApplicationContext,Brush,Component,ComponentDesigner,Container,Context,Cursor,FileStream,Font,Icon,Image,Matrix,Object,OdbcDataReader,OleDBDataReader,Pen,Regex,Socket,StreamWriter,Timer,Tooltip等等資源。可能在使用的時(shí)候很多都沒有注意到!

  在.NET中很多非托管資源在C#封裝下實(shí)現(xiàn)了IDisposable接口,這個(gè)接口只有一個(gè)待實(shí)現(xiàn)的方法Dispose(),在上面提到的類中大都有這個(gè)方法,此外還有些類除了調(diào)用Dispose()方法可以釋放資源之外,還可以調(diào)用Close()方法釋放資源,比如各類數(shù)據(jù)庫連接(Connection)、各種流(Stream),在調(diào)用Close()方法時(shí)會(huì)自動(dòng)調(diào)用Dispose()方法的。

四、CLI

定義:Common Language Infrastructure公共語言基礎(chǔ)結(jié)構(gòu),CLI是一組闡述了系統(tǒng)的架構(gòu)、規(guī)則和約定的規(guī)范。

五、效率探討:同一段代碼測(cè)試托管代碼和非托管代碼效率的對(duì)比。 - 無常 - 博客園

結(jié)論:

? ? ? ?非托管C:4.609s;

? ? ? ??C++ CLR Console Aplication(代碼是C拷貝):15.172s;

? ? ? ?C++內(nèi)容用C#完成:62.453s

很顯然,托管肯定沒有不托管直接交互快。

六、CLI執(zhí)行過程

到目前為止,源代碼已經(jīng)被編譯成二進(jìn)制的IL并且包含在程序集中,而且被CLR加載。但是,直接執(zhí)行運(yùn)算的CPU來說二進(jìn)制的IL還是太高級(jí)了,而且不同的CPU支持的指令集也有所差異。因此,CLR在這里還需要對(duì)已經(jīng)編譯好的IL再次編譯,針對(duì)CPU版本生成可以直接運(yùn)行的CPU指令,這個(gè)過程是由JIT(Just In Time)編譯器完成的,可以稱作"即時(shí)編譯"。

當(dāng)?shù)谝淮螆?zhí)行某個(gè)函數(shù)時(shí),MSCorEE.dll 的JITCompiler函數(shù)會(huì)從程序集的元數(shù)據(jù)中獲取該方法和方法的IL,并且分配一塊內(nèi)存地址,然后將IL編譯成的本地代碼放入這塊內(nèi)存,然后執(zhí)行內(nèi)存中的本地代碼。

當(dāng)再次執(zhí)行這個(gè)函數(shù)的時(shí)候,由于內(nèi)存中已經(jīng)存在JIT編譯好的本地代碼,因此不需要再次進(jìn)行JIT過程,可以直接執(zhí)行內(nèi)存中的本地代碼。 可以預(yù)知的結(jié)果是,這種情況下應(yīng)用程序啟動(dòng)后第一次調(diào)用某個(gè)模塊所花費(fèi)的時(shí)間要比以后調(diào)用這個(gè)模塊要稍微多一些。

七、.NET 組成

.NET框架由三部分組成,編譯工具+CLR+FCL(Framework Class Library)。

編譯工具:IDE、.NET兼容的編譯器(支持C#、VB.NET、F#、IronRuby和托管的C++)、調(diào)試器;

FCL是一個(gè)超類庫,BCL(Base Class Library)也緊緊是它一個(gè)子集;

嚴(yán)格來說,編譯工具不能算作.NET框架一部分的。

總結(jié)

以上是生活随笔為你收集整理的C#基础教程(一).NET框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。