欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

圖解DotNet框架之一:編譯與執行引擎

系統 1746 0

( 聲明:本系列只想給大家介紹.net框架,并不是語法和類的使用的講解,所以只能概括的描述一下所提到的類,如果有疑問可以到MSDN上面去查 )

眾所周知,DotNet框架是非常龐大的,光項目創建時的種類就有WPF,WCF,WF這三種最新的技術,還有以前的Web,WinForm,Service,Mobile等等.
這么復雜和龐大的框架,用文字來描述是遠遠不夠的,所以我準備寫一系列圖文并茂的文章,把我所知道的所有Net框架中的東西全部串聯起來,希望可以給大家一個DotNet框架的知識圖,本人能力有限,難免有理解錯誤和表達不清的地方,望大家諒解并指教.
好,我們現在就開始第一張圖的學習,再所有的文章寫完后,大家將會得到一個完整的框架圖。

圖解DotNet框架之一:編譯與執行引擎

下面我會做出對這個圖的解釋,請大家對照圖來一步一步的學習。

1.CTS 和 CLS :

CTS:公共類型系統。他是一個集合{類,接口,委托,結構,枚舉,類型成員,基本數據類型},只有符合CTS的類型才能在CLR上運行。簡單點說就是VB,C#,C++等DotNet支持的語言的類型集合。這些東西大部分都定義在System.dll中,我們將在下一篇來討論system.dll。
CLS:公共語言規范。從圖上可以看出,他是CTS的子集,為什么他是子集呢?因為在C#中有Ulong而VB中就沒有??匆韵麓a

public class Test
{
public ulong Add( ulong a, ulong b) // 如果某語言特有的類型,作為返回類型和參數則不遵循CLS
{
return a + b;
}

public int Add( int a, int b) // 但是作為局部變量則仍然遵循CLS
{
ulong x;
return a + b;
}

}


在默認.NET開發平臺上是不會執行CLS檢查的,如果要開啟可以在 AssemblyInfo.cs 中加入代碼

[assembly:System.CLSCompliant( true )]


大家可能要問,為什么要遵循CLS呢?答案在后面給出。

2. CIL,元數據和程序集清單

CIL:公共中間語言。我們大家都知道,在.Net中使用VB寫一個DLL,那么在C#的項目中也可以調用,反之亦然。如何實現的呢?就是CIL了,前面我們說過CLS的作用,并且留下了為什么要遵守CLS的疑問,就是因為.net編譯生成的dll或Exe,其實主要是CIL,原數據和程序集清單這三部分組成。那么要想VB和C#共享,就要有一個通用的規范,它就是CLS了,呵呵,現在明白為什么要CLS了吧,如果你不去遵守CLS也是可以的,但是就不能保證你的dll的復用性了。
元數據:.net的反射,遠程處理,序列化這些東西都很神秘吧,其實他們都是原數據的功勞,你所定義的類,方法,方法的返回類型和參數,屬性,字段,都會被編譯成元數據,然后當你序列化或反射時,拿這些原數據給你生成一個類。
程序集清單:這個就容易理解了,你添加的dll引用的信息全都在這里。下面是一個Dll中的信息。

原代碼:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
class Program
{
static void Main( string []args)
{
}

}

public class Test
{
public ulong Add( ulong a, ulong b) // 如果某語言特有的類型,作為返回類型和參數則不遵循CLS
{
return a + b;
}

public int Add( int a, int b) // 但是作為局部變量則仍然遵循CLS
{
ulong x;
return a + b;
}

}

}

使用.Net自帶的 ILDisassembler.exe察看的IL:

. class public autoansibeforefieldinitConsoleApplication3.Test
extends[mscorlib]System.Object
{
.method
public hidebysiginstanceint32
Add(int32a,
int32b)cilmanaged
{
// Codesize4(0x4)
.maxstack 8
IL_0000:ldarg.
1
IL_0001:ldarg.
2
IL_0002:add
IL_0003:ret
}
// endofmethodTest::Add
}


就是這三樣東西組成的dll,讓.net實現了遠程處理的remoting,反射,序列化和跨平臺,跨語言。關于跨平臺的問題,我們在下一篇討論。

上一篇我們講解了CIL,CTS,程序集等內容,并且留下了一個問題,就是.net如何跨平臺,我們現在就來弄明白這個問題.由于篇幅有限,請大家參照第一篇的圖.
按照流程圖我們該講解mscoree.dll了

由相關的.net進程來加載Mscoree.dll,對于相關進程我們在后面講到Winform,ASP.NET時,將繼續講解.
mscoree.dll:公共對象運行庫執行引擎.由他來尋找所有要加載的dll的位置并且加載他們(必須包含mscorlib.dll 他是核心類庫,包含大量的核心類型,System,system.io等).然后讀取程序集中的元數據.所以mscoree.dll又被稱為CLR的墊片.

CLR:公共語言運行庫.前面我們已經啟動了他的墊片,那么下來就要.net的靈魂人物出場了,他就是CLR,如同Java的虛擬機一樣,.net缺少了他,就成了殘廢了,呵呵.在mscoree.dll加載了類型以后,CLR會以特定的機器CPU來加載對應的dll(mscorwk.dll或者mscorsrv.dll,這就是.net的性能為何很好的原因),然后CLR會在內存中為類型布局,將關聯的CIL,運用JIT編譯成特定平臺的指令.嘿嘿,也許大家已經猜到了.net是如何跨平臺的了吧.因為.net的dll實際是在運行時,才全部由各平臺的JIT來編譯成機器指令的.所以自然就可以跨平臺嘍.

CLR中的GC:垃圾回收器. 我們知道.net中一般情況是不需要手動釋放資源的,做過C++的人都知道手動釋放資源意味著什么:莫名其妙的錯誤,無盡的深淵....,在.net中所有的托管資源都有GC這個保潔員來給你打掃衛生.CLR中會創建"對象圖"和標示對象的"代".
1.對象圖說白了就是檢查對象是否還可以在被引用.
2.代這個概念是用來幫助GC快速的來檢查哪些對象沒有被引用,在.net中有0,1,2三代.0是新創建的對象,1是執行了一次回收以后,存在引用的對象,2是執行了一次以上回收,還沒有被清理的對象.GC總是從0代開始回收,如果內存已經夠用,則不對1代操作,否則就檢查一代是否存在沒有引用的對象.執行回收,如果還不夠,就清理2代.

我們來看看GC是如何工作的:

ABCDF被標示為0代

圖解DotNet框架之一:編譯與執行引擎

我們現在回收0代的對象,因為BF沒有引用,所以回收他們的內存,并且壓縮托管堆.

現在 ACD被標示為1代


圖解DotNet框架之一:編譯與執行引擎 如果再來一次回收如果ACD依然沒有被回收,那么他們就被標示為2代.OK,現在我們明白了GC是如何來釋放資源的了.

.net進程: 一個.net進程中包含多個應用程序域,這就是.net平臺操作系統獨立性的關鍵特性,和完整的進程相比,應用程序域的CPU和內存都占用得比較少,因此CLR加載和卸載應用程序域(Appdomain)就快很多.
應用程序域(Appdomain):其中包含多個需要的Dll和上下文(Context),也就是說每個Appdomain都有mscorlib.dll等dll,經過了這一步,就該是具體的應用程序了,如ASP.Net,WPF等不同形式的應用程序,再后續的文章里,將介紹他們的框架,最后再整合起來,就是完整的.net框架了,在這之前,我們先來學習一下.net中重要的幾個Dll,給新 人打一下基礎,高手們就不用看了,不過希望高手們可以指教一下。

下幾篇中介紹.net中常用的Dll,然后再對各種應用程序做圖解。

圖解DotNet框架之一:編譯與執行引擎


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!??!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美日韩亚洲综合另类ac | 精品久久| 在线视频观看国产 | 91成人精品| 2022国产成人精彩在线视频 | 嘿咻嘿咻免费区在线观看吃奶 | 成人18免费观看的软件 | 国产视频第一页 | 黄色影院在线看 | 一区二区欧美视频 | 免费在线国产视频 | 国产日韩欧美 | 成人免费视频网站在线观看 | 一级毛片视频播放 | 成人av网站在线观看 | 国产一区二区自拍 | 亚洲高清专区 | 亚洲欧美精品中字久久99 | 欧美日韩视频在线第一区 | 久草草视频在线观看免费高清 | 色婷婷狠狠 | 欧美日韩国产一区二区三区不卡 | 久草视频免费播放 | 这里只有精品99re | 在线欧美 | 国产欧美日韩在线不卡第一页 | 久久99国产精一区二区三区 | 亚洲已满18点击进入在线观看 | 日本不卡网站 | 国产成人精品福利网站在线观看 | 国产欧美日韩一区 | 五月综合激情婷婷六月 | 久久精品国产一区二区三区不卡 | 青青青国产依人精品视频 | 欧美日韩综合精品一区二区三区 | 国产一级特黄毛片在线毛片 | 99影视| 日韩亚洲欧美在线爱色 | 欧美另类综合 | 视频一区二区三区四区五区 | 97麻豆精品国产自产在线观看 |