狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開(kāi)發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

第一章 .NET體系結(jié)構(gòu)

admin
2017年2月7日 18:54 本文熱度 6324

.NET體系由公共語(yǔ)言運(yùn)行庫(kù)(CLR)(Common Language Runtime)和.NET Framework類庫(kù)所構(gòu)成。CLR.NET Framework 的核心執(zhí)行環(huán)境,也稱為.NET運(yùn)行庫(kù)。.NET Framework類庫(kù)是一個(gè)內(nèi)容豐富的類集合,它可以完成以前要通過(guò)Windows API來(lái)完成的絕大多數(shù)任務(wù)。

一、CLR概述

CLR主要負(fù)責(zé)托管代碼的編譯和運(yùn)行。在.NET中代碼的編譯分為兩個(gè)階段: 1. 把源代碼編譯為Microsoft中間語(yǔ)言(IL)。2. CLRIL編譯為平臺(tái)專用的代碼。

CLR的控制下運(yùn)行的代碼常常稱為托管代碼(managed code)。托管代碼的優(yōu)點(diǎn):

1. 平臺(tái)無(wú)關(guān)性。源代碼先編譯成中間語(yǔ)言,運(yùn)行時(shí)由CLR將中間語(yǔ)言編譯成平臺(tái)專用的代碼,跟Java的字節(jié)代碼一樣,這樣即可實(shí)現(xiàn)平臺(tái)無(wú)關(guān)性。

2. 提高性能。首先,ILJava的字節(jié)碼作用還要大,因?yàn)?/span>IL是即時(shí)編譯的,而Java的字節(jié)碼常常是解釋性的,在轉(zhuǎn)換為平臺(tái)可執(zhí)行代碼的時(shí)候可能會(huì)導(dǎo)致性能損失。其次,.NET的即時(shí)編譯器(JIT)(Just In Time)并非一次把全部代碼編譯完才執(zhí)行,而是只編譯調(diào)用的那部分代碼,并把得到的這部分內(nèi)部可執(zhí)行代碼保存起來(lái),下次需要調(diào)用的時(shí)候無(wú)須重新編譯。Microsoft認(rèn)為這個(gè)過(guò)程要比一開(kāi)始編譯整個(gè)應(yīng)用程序代碼的效率高得多,因?yàn)槿魏纬绦虻拇蟛糠执a實(shí)際上并不是在每次運(yùn)行過(guò)程中都執(zhí)行。最后,傳統(tǒng)的編譯器會(huì)優(yōu)化代碼,但它們的優(yōu)化過(guò)程是獨(dú)立于代碼所運(yùn)行的特定處理器的。例如Visual Studio 6優(yōu)化了一臺(tái)一般的Pentium機(jī)器,它所生成的代碼就不能利用Pentium Ш處理器的硬件特性。而JIT與平臺(tái)無(wú)關(guān),所以它可以針對(duì)不同的機(jī)器完成不同的優(yōu)化。

3. 語(yǔ)言的互操作性。互操作性即能將任何一種語(yǔ)言編譯為中間代碼,編譯好的代碼可以與從其它語(yǔ)言編譯過(guò)來(lái)的代碼進(jìn)行交互操作。在.NET中可以交互操作的語(yǔ)言有C#VB.NETVisual C++.NETVisual J#、腳本語(yǔ)言、COMCOM+

二、中間語(yǔ)言

中間語(yǔ)言(IL)在.NET Framework中有非常重要的作用,所有面向.NET的語(yǔ)言都要先編譯成IL,那么它們?cè)谶壿嬌隙夹枰С?/span>IL的主要特征。IL的主要特征:

1.         面向?qū)ο蠛褪褂媒涌?/span>

2.         值類型和引用類型之間的巨大差別

3.         強(qiáng)數(shù)據(jù)類型

4.         使用異常來(lái)處理錯(cuò)誤

5.         使用特性(attribute

下面詳細(xì)討論一下這些特性。

1. 面向?qū)ο蠛徒涌诘闹С?/span>

MicrosoftIL選擇的特定道路是傳統(tǒng)的面向?qū)ο蟮木幊蹋瑤в蓄惖膯我焕^承性。此外IL還引進(jìn)了接口的概念。.NET接口與COM接口不同,它們不需要支持任何COM基礎(chǔ)結(jié)構(gòu),例如,它們不是派生自IUnknown,也沒(méi)有GUID。但是它們與COM接口共享下述理念:提供一個(gè)契約,實(shí)現(xiàn)給定接口的類必須提供該接口指定的方法和屬性的實(shí)現(xiàn)方式。

2. 值類型與引用類型

與其它編程語(yǔ)言一樣,IL提供了許多預(yù)定義的基本數(shù)據(jù)類型,IL的一個(gè)特征就是值類型和引用類型有明顯的區(qū)別。對(duì)于值類型,變量直接保存其數(shù)據(jù),在堆棧上面分配存儲(chǔ)空間;而對(duì)于引用類型,變量保存數(shù)據(jù)的地址,引用類型的數(shù)據(jù)在堆上非配存儲(chǔ)空間。

3. 強(qiáng)數(shù)據(jù)類型

IL的一個(gè)重要方面是它基于強(qiáng)數(shù)據(jù)類型,即所有的變量都清晰地標(biāo)記為屬于某個(gè)特定數(shù)據(jù)類型,IL一般不允許對(duì)模糊的數(shù)據(jù)類型執(zhí)行任何操作。

盡管強(qiáng)迫實(shí)現(xiàn)類型的安全性最初會(huì)降低性能,但在許多情況下下,我們從.NET提供的、依賴于類型安全的服務(wù)中獲得的好處更多。這些服務(wù)包括:

(1)       語(yǔ)言的互操作性

(2)       垃圾收集

(3)       安全性

(4)       應(yīng)用程序域

下面我們分別闡述一下:

3.1 語(yǔ)言互操作性中強(qiáng)數(shù)據(jù)類型的重要性

如果類派生其它類,或包含其它類的實(shí)例,它就需要知道其它類使用的所有數(shù)據(jù)類型,這就是強(qiáng)數(shù)據(jù)類型非常重要的原因。假定VB.NET類中的一個(gè)方法被定義為返回一個(gè)整型,但C#中沒(méi)有該名稱的數(shù)據(jù)類型,如果要實(shí)現(xiàn)語(yǔ)言的互操作性,那么編譯器就需要知道如何把VB.NET的整型類型映射為C#定義的某種已知類型,這樣就可以在C#代碼中使用返回的類型。

這個(gè)問(wèn)題在.NET中是通過(guò)通用類型系統(tǒng)(CTS)(Common Type System)和公共語(yǔ)言規(guī)范(CLS)(Common Language Specification)來(lái)解決的。

首先CTS定義了可以在中間語(yǔ)言中使用的預(yù)定義數(shù)據(jù)類型,所有用于.NET的語(yǔ)言都可以生成最終基于這些類型的編譯代碼。例如,VB.NET的整型實(shí)際上是一個(gè)32位的有符號(hào)整數(shù),它映射為IL的類型Int32C#中的int也映射為IL的類型Int32,這樣C#代碼和VB.NET中的整型數(shù)據(jù)就可以通過(guò)IL類型Int32建立相應(yīng)的關(guān)系,從而實(shí)現(xiàn)互操作。

CTS除了定義了基本數(shù)據(jù)類型以外,還定義了一個(gè)內(nèi)容豐富的類型層次結(jié)構(gòu)。通用類型系統(tǒng)的層次結(jié)構(gòu)反映了IL的單一繼承的面向?qū)ο蟮姆椒ǎ缦聢D所示。

其次CLSCTS一起確保語(yǔ)言的互操作性。CLS是一個(gè)最低標(biāo)準(zhǔn)集,所有面向.NET的編譯器都必須支持它。

3.2 垃圾收集

垃圾收集器用來(lái)在.NET中進(jìn)行內(nèi)存管理,特別是它可以恢復(fù)正在運(yùn)行中的應(yīng)用程序需要的內(nèi)存。到目前為止,Windows平臺(tái)已經(jīng)使用了兩種技術(shù)來(lái)釋放進(jìn)程向系統(tǒng)動(dòng)態(tài)請(qǐng)求的內(nèi)存:(1)完全手工方式使應(yīng)用程序代碼完成這些工作。(2)讓對(duì)象維護(hù)引用計(jì)數(shù)。

第一種方式是低級(jí)、高性能的語(yǔ)言使用技術(shù),例如C++。這種技術(shù)很有效,能即時(shí)釋放資源,但是最大的缺點(diǎn)是容易出錯(cuò),遺忘釋放內(nèi)存,導(dǎo)致內(nèi)存泄漏。盡管現(xiàn)代開(kāi)發(fā)環(huán)境提供了幫助檢測(cè)內(nèi)存泄漏的工具,但它們很難跟蹤錯(cuò)誤。

第二種方式是COM對(duì)象采用的一種技術(shù),其方法是每個(gè)COM組件都保留一個(gè)計(jì)數(shù),記錄客戶機(jī)目前對(duì)它的引用數(shù)。當(dāng)這個(gè)計(jì)數(shù)下降到0時(shí),組件就會(huì)刪除自己,并釋放相應(yīng)的內(nèi)存和資源。但它仍然需要客戶機(jī)通知組件它們已經(jīng)完成了內(nèi)存的使用,只要有一個(gè)客戶機(jī)沒(méi)有這么做,對(duì)象就仍駐留在內(nèi)存中。在某些方面,這個(gè)比C++內(nèi)存泄漏更為嚴(yán)重,因?yàn)?/span>COM對(duì)象可能存在于它自己的進(jìn)程中,從來(lái)不會(huì)被系統(tǒng)刪除。

.NET采用的方法是垃圾收集器,這是一個(gè)程序,其目的是清理內(nèi)存,方法是所有動(dòng)態(tài)請(qǐng)求的內(nèi)存都分配到堆上,當(dāng).NET檢測(cè)到給定進(jìn)程的托管堆已滿,需要清理時(shí),就調(diào)用垃圾收集器。垃圾收集器處理目前代碼中的所有變量,檢查對(duì)存儲(chǔ)在托管堆上的對(duì)象的引用,確定哪些對(duì)象有引用,哪些沒(méi)有引用,沒(méi)有引用的對(duì)象就不能再?gòu)拇a中訪問(wèn),即可以被刪除。Java就使用與此類似的垃圾收集器系統(tǒng)。

3.3 安全性

3.4 應(yīng)用程序域

應(yīng)用程序域是.NET中的一個(gè)重要技術(shù)改進(jìn),它用于減少運(yùn)行應(yīng)用程序的系統(tǒng)開(kāi)銷,這些應(yīng)用程序需要與其它程序分離開(kāi)來(lái),但同時(shí)還需要彼此通信。典型的例子是web服務(wù)器應(yīng)用程序,它需要同時(shí)響應(yīng)許多瀏覽器請(qǐng)求,因此,要有許多組件實(shí)例同時(shí)響應(yīng)這些同時(shí)運(yùn)行的請(qǐng)求。

到現(xiàn)在為止,孤立代碼的唯一方式是通過(guò)進(jìn)程來(lái)實(shí)現(xiàn)的。在運(yùn)行一個(gè)新的應(yīng)用程序時(shí),它會(huì)在一個(gè)進(jìn)程環(huán)境內(nèi)運(yùn)行。Windows通過(guò)地址空間把進(jìn)程分隔開(kāi)來(lái)。這樣,每個(gè)進(jìn)程有4GB的虛擬內(nèi)存來(lái)存儲(chǔ)其數(shù)據(jù)和可執(zhí)行代碼(4GB對(duì)應(yīng)32位系統(tǒng)),虛擬內(nèi)存映射到物理內(nèi)存,物理內(nèi)存不能有重疊,這種情況如下圖所示:
                                                                                    

      

 

進(jìn)程對(duì)確保安全有很大的幫助,而它們卻存在性能的缺點(diǎn)。往往多個(gè)進(jìn)程需要一起工作,且需要相互通信。例如進(jìn)程調(diào)用一個(gè)COM組件,而該COM組件是可執(zhí)行的,需要在它自己的進(jìn)程上運(yùn)行。因?yàn)檫M(jìn)程不能共享任何內(nèi)存,所以必須使用一個(gè)復(fù)雜的編組過(guò)程在進(jìn)程之間復(fù)制數(shù)據(jù)。這對(duì)性能有非常大的影響。避免性能影響的唯一方法是基于DLL的組件,讓所有的組件在同一地址空間運(yùn)行——其相關(guān)的風(fēng)險(xiǎn)是執(zhí)行出錯(cuò)的組件會(huì)影響其它組件。

應(yīng)用程序域是分離組件的一種方式,它不會(huì)導(dǎo)致因在進(jìn)程之間傳送數(shù)據(jù)而產(chǎn)生性能問(wèn)題。其方法是把任何一個(gè)進(jìn)程分解到多個(gè)應(yīng)用程序域中,每個(gè)應(yīng)用程序域大致對(duì)應(yīng)一個(gè)應(yīng)用程序,執(zhí)行的每個(gè)線程都運(yùn)行在一個(gè)具體的應(yīng)用程序域中,如下圖所示:
    

 

中間語(yǔ)言具有強(qiáng)大的類型安全功能,在大多數(shù)情況下,除非代碼 明確使用不安全的特性,例如指針,否則它使用的數(shù)據(jù)類型可以確保內(nèi)存不會(huì)被錯(cuò)誤地訪問(wèn)。

 

三、程序集

程序集(assembly)是包含編譯好的、面向.NET Framework的代碼的邏輯單元。它是完全自我描述性的,是一個(gè)邏輯單元,可以存儲(chǔ)在多個(gè)文件中。如果一個(gè)程序集存儲(chǔ)在多個(gè)文件中,其中就會(huì)有一個(gè)包含入口點(diǎn)的主文件,該文件描述了程序集中的其它文件。

可執(zhí)行代碼和庫(kù)代碼的程序集結(jié)構(gòu)相同,唯一區(qū)別是可執(zhí)行的程序集包含一個(gè)主程序入口點(diǎn),而庫(kù)程序集不包含。

程序集包含程序的元數(shù)據(jù),元數(shù)據(jù)描述了對(duì)應(yīng)代碼中定義的類型和方法以及描述程序集本身,這樣其它程序在調(diào)用該程序集的時(shí)候,不需要指定注冊(cè)表或其它數(shù)據(jù)源。通過(guò)元數(shù)據(jù)還可以將程序集放在不同的位置上而不影響數(shù)據(jù)的同步問(wèn)題。

程序集有兩種類型:共享程序集和私有程序集。私有程序集一般附帶在某些軟件上,且只能用于該軟件中。系統(tǒng)可以保證私有程序集不被其它軟件使用,因?yàn)閼?yīng)用程序只能加載位于主執(zhí)行文件所在文件夾或其子文件夾中的程序集。共享程序集是其它應(yīng)用程序可以使用的公共庫(kù)。

 

四、.NET Framework

.NET Framework類是一個(gè)內(nèi)容豐富的托管代碼類集合,它可以完成以前要通過(guò)Windows API來(lái)完成的絕大多數(shù)任務(wù)。這些類派生于與中間語(yǔ)言相同的對(duì)象模型,也基于單一繼承性。可以實(shí)例化.NET Framework類,也可以從它們派生自己的類。.NET Framework類直觀易用,它結(jié)合了Visual BasicJava庫(kù)的易用性和Windows API函數(shù)的豐富功能。.NET Framework類包括:

1.  IL提供的核心功能,例如,通用類型系統(tǒng)中的基本數(shù)據(jù)類型

2.  Windows GUI支持和控件

3.  Web窗體

4.  數(shù)據(jù)訪問(wèn)

5.  目錄訪問(wèn)

6.  文件系統(tǒng)和注冊(cè)表訪問(wèn)

7.  網(wǎng)絡(luò)和web瀏覽

8.  .NET特性和反射

9.  訪問(wèn)Windows操作系統(tǒng)的各個(gè)方面(如環(huán)境變量等)

10COM互操作性


該文章在 2017/2/7 18:54:32 編輯過(guò)
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開(kāi)發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉(cāng)儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購(gòu)管理,倉(cāng)儲(chǔ)管理,倉(cāng)庫(kù)管理,保質(zhì)期管理,貨位管理,庫(kù)位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved