欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

第一章 .NET體系結構

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

.NET體系由公共語言運行庫(CLR)(Common Language Runtime)和.NET Framework類庫所構成。CLR.NET Framework 的核心執行環境,也稱為.NET運行庫。.NET Framework類庫是一個內容豐富的類集合,它可以完成以前要通過Windows API來完成的絕大多數任務。

一、CLR概述

CLR主要負責托管代碼的編譯和運行。在.NET中代碼的編譯分為兩個階段: 1. 把源代碼編譯為Microsoft中間語言(IL)。2. CLRIL編譯為平臺專用的代碼。

CLR的控制下運行的代碼常常稱為托管代碼(managed code)。托管代碼的優點:

1. 平臺無關性。源代碼先編譯成中間語言,運行時由CLR將中間語言編譯成平臺專用的代碼,跟Java的字節代碼一樣,這樣即可實現平臺無關性。

2. 提高性能。首先,ILJava的字節碼作用還要大,因為IL是即時編譯的,而Java的字節碼常常是解釋性的,在轉換為平臺可執行代碼的時候可能會導致性能損失。其次,.NET的即時編譯器(JIT)(Just In Time)并非一次把全部代碼編譯完才執行,而是只編譯調用的那部分代碼,并把得到的這部分內部可執行代碼保存起來,下次需要調用的時候無須重新編譯。Microsoft認為這個過程要比一開始編譯整個應用程序代碼的效率高得多,因為任何程序的大部分代碼實際上并不是在每次運行過程中都執行。最后,傳統的編譯器會優化代碼,但它們的優化過程是獨立于代碼所運行的特定處理器的。例如Visual Studio 6優化了一臺一般的Pentium機器,它所生成的代碼就不能利用Pentium Ш處理器的硬件特性。而JIT與平臺無關,所以它可以針對不同的機器完成不同的優化。

3. 語言的互操作性。互操作性即能將任何一種語言編譯為中間代碼,編譯好的代碼可以與從其它語言編譯過來的代碼進行交互操作。在.NET中可以交互操作的語言有C#、VB.NET、Visual C++.NETVisual J#、腳本語言、COMCOM+

二、中間語言

中間語言(IL)在.NET Framework中有非常重要的作用,所有面向.NET的語言都要先編譯成IL,那么它們在邏輯上都需要支持IL的主要特征。IL的主要特征:

1.         面向對象和使用接口

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

3.         強數據類型

4.         使用異常來處理錯誤

5.         使用特性(attribute

下面詳細討論一下這些特性。

1. 面向對象和接口的支持

MicrosoftIL選擇的特定道路是傳統的面向對象的編程,帶有類的單一繼承性。此外IL還引進了接口的概念。.NET接口與COM接口不同,它們不需要支持任何COM基礎結構,例如,它們不是派生自IUnknown,也沒有GUID。但是它們與COM接口共享下述理念:提供一個契約,實現給定接口的類必須提供該接口指定的方法和屬性的實現方式。

2. 值類型與引用類型

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

3. 強數據類型

IL的一個重要方面是它基于強數據類型,即所有的變量都清晰地標記為屬于某個特定數據類型,IL一般不允許對模糊的數據類型執行任何操作。

盡管強迫實現類型的安全性最初會降低性能,但在許多情況下下,我們從.NET提供的、依賴于類型安全的服務中獲得的好處更多。這些服務包括:

(1)       語言的互操作性

(2)       垃圾收集

(3)       安全性

(4)       應用程序域

下面我們分別闡述一下:

3.1 語言互操作性中強數據類型的重要性

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

這個問題在.NET中是通過通用類型系統(CTS)(Common Type System)和公共語言規范(CLS)(Common Language Specification)來解決的。

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

CTS除了定義了基本數據類型以外,還定義了一個內容豐富的類型層次結構。通用類型系統的層次結構反映了IL的單一繼承的面向對象的方法,如下圖所示。

其次CLSCTS一起確保語言的互操作性。CLS是一個最低標準集,所有面向.NET的編譯器都必須支持它。

3.2 垃圾收集

垃圾收集器用來在.NET中進行內存管理,特別是它可以恢復正在運行中的應用程序需要的內存。到目前為止,Windows平臺已經使用了兩種技術來釋放進程向系統動態請求的內存:(1)完全手工方式使應用程序代碼完成這些工作。(2)讓對象維護引用計數。

第一種方式是低級、高性能的語言使用技術,例如C++。這種技術很有效,能即時釋放資源,但是最大的缺點是容易出錯,遺忘釋放內存,導致內存泄漏。盡管現代開發環境提供了幫助檢測內存泄漏的工具,但它們很難跟蹤錯誤。

第二種方式是COM對象采用的一種技術,其方法是每個COM組件都保留一個計數,記錄客戶機目前對它的引用數。當這個計數下降到0時,組件就會刪除自己,并釋放相應的內存和資源。但它仍然需要客戶機通知組件它們已經完成了內存的使用,只要有一個客戶機沒有這么做,對象就仍駐留在內存中。在某些方面,這個比C++內存泄漏更為嚴重,因為COM對象可能存在于它自己的進程中,從來不會被系統刪除。

.NET采用的方法是垃圾收集器,這是一個程序,其目的是清理內存,方法是所有動態請求的內存都分配到堆上,當.NET檢測到給定進程的托管堆已滿,需要清理時,就調用垃圾收集器。垃圾收集器處理目前代碼中的所有變量,檢查對存儲在托管堆上的對象的引用,確定哪些對象有引用,哪些沒有引用,沒有引用的對象就不能再從代碼中訪問,即可以被刪除。Java就使用與此類似的垃圾收集器系統。

3.3 安全性

3.4 應用程序域

應用程序域是.NET中的一個重要技術改進,它用于減少運行應用程序的系統開銷,這些應用程序需要與其它程序分離開來,但同時還需要彼此通信。典型的例子是web服務器應用程序,它需要同時響應許多瀏覽器請求,因此,要有許多組件實例同時響應這些同時運行的請求。

到現在為止,孤立代碼的唯一方式是通過進程來實現的。在運行一個新的應用程序時,它會在一個進程環境內運行。Windows通過地址空間把進程分隔開來。這樣,每個進程有4GB的虛擬內存來存儲其數據和可執行代碼(4GB對應32位系統),虛擬內存映射到物理內存,物理內存不能有重疊,這種情況如下圖所示:
                                                                                    

      

 

進程對確保安全有很大的幫助,而它們卻存在性能的缺點。往往多個進程需要一起工作,且需要相互通信。例如進程調用一個COM組件,而該COM組件是可執行的,需要在它自己的進程上運行。因為進程不能共享任何內存,所以必須使用一個復雜的編組過程在進程之間復制數據。這對性能有非常大的影響。避免性能影響的唯一方法是基于DLL的組件,讓所有的組件在同一地址空間運行——其相關的風險是執行出錯的組件會影響其它組件。

應用程序域是分離組件的一種方式,它不會導致因在進程之間傳送數據而產生性能問題。其方法是把任何一個進程分解到多個應用程序域中,每個應用程序域大致對應一個應用程序,執行的每個線程都運行在一個具體的應用程序域中,如下圖所示:
    

 

中間語言具有強大的類型安全功能,在大多數情況下,除非代碼 明確使用不安全的特性,例如指針,否則它使用的數據類型可以確保內存不會被錯誤地訪問。

 

三、程序集

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

可執行代碼和庫代碼的程序集結構相同,唯一區別是可執行的程序集包含一個主程序入口點,而庫程序集不包含。

程序集包含程序的元數據,元數據描述了對應代碼中定義的類型和方法以及描述程序集本身,這樣其它程序在調用該程序集的時候,不需要指定注冊表或其它數據源。通過元數據還可以將程序集放在不同的位置上而不影響數據的同步問題。

程序集有兩種類型:共享程序集和私有程序集。私有程序集一般附帶在某些軟件上,且只能用于該軟件中。系統可以保證私有程序集不被其它軟件使用,因為應用程序只能加載位于主執行文件所在文件夾或其子文件夾中的程序集。共享程序集是其它應用程序可以使用的公共庫。

 

四、.NET Framework

.NET Framework類是一個內容豐富的托管代碼類集合,它可以完成以前要通過Windows API來完成的絕大多數任務。這些類派生于與中間語言相同的對象模型,也基于單一繼承性。可以實例化.NET Framework類,也可以從它們派生自己的類。.NET Framework類直觀易用,它結合了Visual BasicJava庫的易用性和Windows API函數的豐富功能。.NET Framework類包括:

1.  IL提供的核心功能,例如,通用類型系統中的基本數據類型

2.  Windows GUI支持和控件

3.  Web窗體

4.  數據訪問

5.  目錄訪問

6.  文件系統和注冊表訪問

7.  網絡和web瀏覽

8.  .NET特性和反射

9.  訪問Windows操作系統的各個方面(如環境變量等)

10COM互操作性


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