Microsoft .NET架構FAQ續

來源:互聯網
上載者:User
.net架構

記憶體回收

什麼是記憶體回收?


記憶體回收是一種機制,它使電腦能夠檢測到對象何時不能再被訪問。然後它自動釋放該對象所使用的記憶體(同時調用由使用者編寫的稱為“終結程式”的清理常式)。有些記憶體回收行程(如 .NET 使用的記憶體回收行程)壓縮記憶體,從而減小程式的工作集。
返回到頂部

非確定性記憶體回收如何影響代碼?


對於大多數程式員而言,擁有記憶體回收行程(並使用記憶體回收對象)意味著即使使用複雜的資料結構,也不必擔心釋放記憶體或引用計數對象。但是,如果您通常在釋放對象記憶體的同一代碼塊中釋放系統資源(檔案控制代碼、鎖等等),則確實需要在編碼樣式方面進行某些更改。對於記憶體回收對象,應提供一種以確定方式(即受程式的控制)釋放系統資源的方法,並使記憶體回收行程可以在壓縮工作集時釋放記憶體。
返回到頂部

可以避免使用記憶體回收堆嗎?


所有面向運行庫的語言都允許從記憶體回收堆分配類對象。這帶來了快速分配方面的好處,並且使程式員不必計算出何時應顯式“釋放”每個對象。
CLR 還提供所謂的 ValueType。ValueType 與類相似,不同的是 ValueType 對象在運行時堆棧(而不是堆)上分配,因此當代碼退出定義了這些對象的過程時它們將被自動回收。這便是 C# 中“結構”的操作方式。
C++ 託管擴充使您可以選擇分配類對象的位置。如果由 __gc 關鍵字聲明為託管類,則它們從記憶體回收堆中分配。如果它們不包括 __gc 關鍵字,則它們的行為和常規 C++ 對象類似,都是從 C++ 堆分配,並且由“free”方法顯式釋放。
有關記憶體回收的附加資訊,請參閱:
  • 記憶體回收:Microsoft .NET 架構中的自動記憶體管理
  • 記憶體回收(第 2 部分):Microsoft .NET 架構中的自動記憶體管理

返回到頂部

遠端

進程內和進程間通訊在公用語言運行庫中的工作機制是什嗎?


進程內通訊有兩個方面:單個應用程式定義域中的上下文之間的通訊或應用程式定義域之間的通訊。在同一應用程式定義域的上下文之間,代理用作偵聽機制。不涉及任何封送處理或序列化操作。在跨越多個應用程式定義域時,我們使用運行時二進位協議進行封送處理/序列化。
進程間通訊使用可插接式通道和格式化程式協議,其中每個協議適用於特定的目的。
  • 如果開發人員使用工具 soapsuds.exe 指定端點以產生中繼資料代理,則預設設定為具有 SOAP 格式化程式的 HTTP 通道。
  • 如果開發人員在託管環境中進行顯式的遠端,則必須明確要使用的通道和格式化程式。這可以表示為管理形式,通過設定檔,或通過 API 呼叫載入特定的通道。選項為:
    具有 SOAP 格式化程式的 HTTP 通道(HTTP 非常適合在 Internet 上使用或者通訊必須經過防火牆的情況)
    具有二進位格式化程式的 TCP 通道(TCP 是用於區域網路 (LAN) 的效能更高的選項)

當在Managed 程式碼和Unmanaged 程式碼間進行轉換時,COM 結構(確切地說是 DCOM)用於遠端。在 CLR 的中間版本中,這通過適用於被服務的組件(使用 COM+ 服務的組件)。在最終發布時,應該可以配置任何可遠端的組件。
對象的分布式記憶體回收由稱為“基於租約的生存期”的系統託管。每個對象均有一個租用時間,當時間到期時,對象會與 CLR 的遠端結構中斷連線。對象都有預設的續訂時間,當從用戶端成功地調用了對象時續訂該租約。用戶端也可以顯式續訂租約。
返回到頂部

互通性

可以在 .NET 架構程式中使用 COM 物件嗎?


可以。現已部署的任何 COM 組件均可通過Managed 程式碼中使用,通常情況下,改編是完全自動的。
具體說來,自動行為是使用運行庫可調用的封裝 (RCW) 從 .NET 架構訪問 COM 組件。該封裝將 COM 組件公開的 COM 介面轉換成與 .NET 架構相容的介面。對於 OLE 自動化介面,RCW 可以從類型庫中自動產生。而對於非 OLE 自動化介面,開發人員可以編寫自訂 RCW,並將 COM 介面公開的類型手動映射至與 .NET 架構相容的類型。
返回到頂部

可以在 COM 程式中使用 .NET 架構組件嗎?


可以。現已產生的託管類型可通過 COM 訪問,通常情況下,配置是完全自動的。託管開發環境的某些新功能無法通過 COM 訪問。例如,靜態方法和參數化建構函式無法通過 COM 使用。通常情況下,最好提前確定給定類型的預期使用者。如果要通過 COM 使用類型,則可能只限於使用 COM 可訪問的功能。
根據用於編寫託管類型的語言,預設情況下,該類型可能是可見的,也可能是不可見的。
具體說來,自動行為是使用 COM 可調用的封裝 (CCW) 從 COM 訪問 .NET 架構組件。這與 RCW 類似(請參閱前一個問題),但工作方向相反。此外,如果 .NET 架構開發工具無法自動產生封裝,或者如果自動行為不是您所要的,則可以開發自訂 CCW。
返回到頂部

可以在 .NET 架構程式中使用 Win32 API 嗎?


可以。使用平台叫用,.NET 架構程式可以通過靜態 DLL 進入點訪問機器碼庫。
下面是一個調用 Win32 MessageBox 函數的 C# 樣本:
using System; using System.Runtime.InteropServices;  class MainApp {     [DllImport("user32.dll", EntryPoint="MessageBox")]     public static extern int MessageBox(int hWnd, String strMessage, String strCaption, uint uiType);      public static void Main()     {         MessageBox( 0, "Hello, this is PInvoke in operation!", ".NET", 0 );     } }

返回到頂部

安全性

為使代碼適用於安全系統,必須做哪些工作?


這通常不是問題,大多數應用程式將安全運行,並且不會被惡意攻擊所利用。只需使用標準的類庫訪問資源(如檔案)或執行受保護的操作(如類型的私人成員反射),安全性便由這些庫得到加強。開發人員可能需要做的一件簡單的事是包括許可權請求(聲明安全性的形式),以限制代碼可以接收的許可權(限制為它需要的許可權)。這還可確保在允許代碼啟動並執行情況下,只有具備了所需的所有許可權才能這樣做。
只有編寫新基底類別庫公開新的資源類型的開發人員才需要直接使用安全系統。不是使所有的代碼都有潛在的安全危險,程式碼存取安全性將危險限制在顯式重寫安全系統的極少量代碼上。
返回到頂部

為什麼在從網際網路共用磁碟機運行代碼時收到安全性異常?


預設的安全性原則只向來自本地 Intranet 地區的代碼授予一組有限的許可權。該地區由 Internet Explorer 安全設定定義,並且應配置為與企業中的本網匹配。由於由 UNC 或對應磁碟機命名(如用 NET USE 命令)的檔案通過該本網發送,這些檔案也在本地 Intranet 地區中。
預設值是針對不安全 Intranet 的最壞情況設定的。如果您的 Intranet 比較安全,則可以修改安全性原則(用 .NET 架構組態工具或 CASPol 工具),向本地 Intranet 或它的各部分(例如特定的電腦共用名稱)授予更多許可權。
返回到頂部

如何使代碼在安全系統停止它時運行?


當代碼試圖執行無權執行的操作時會發生安全性異常。許可權的授予基於已知的代碼情況,尤其是它的位置。例如,從 Internet 啟動並執行代碼比從本機電腦啟動並執行代碼獲得的許可權少,因為經驗證明前者通常不如後者可靠。因此,為了使因安全性異常而失敗的代碼運行,必須增加授予它的許可權。這樣做的一個簡單方法是將代碼移至更受信任的位置(如本地檔案系統)。但這並不適用於所有情況(Web 應用程式便是一個很好的例子,公司網路上的 Intranet 應用程式是另一個例子)。因此,如果不改變代碼的位置,還可以更改安全性原則,向該位置授予更多許可權。使用 .NET 架構組態工具或代碼訪問安全性原則工具 + 生產力(caspol.exe)都可以做到這一點。如果您是代碼開發人員或發行者,則還可以為代碼加上數位簽章,然後修改安全性原則,向帶該簽名的代碼授予更多許可權。但是,在採用上述任何操作時,請記住給代碼授與權限要少些,這是因為它不是來自可識別的可靠源。在將代碼移至本機電腦或更改安全性原則前,應確保信任代碼不會執行惡意的或損害性操作。
返回到頂部

如何管理個人電腦的安全性?如何管理企業電腦的安全性?


.NET 架構套件括 .NET 架構組態工具——MMC 嵌入式管理單元(mscorcfg.msc)以配置包括安全性原則在內的 CLR 的若干方面。該嵌入式管理單元不僅支援在本機電腦上管理安全性原則,而且還建立與系統管理伺服器和組策略相容的企業策略部署套件。命令列工具 + 生產力 CASPol.exe 也可用於電腦上的指令碼策略更改。為了在命令提示中運行任一種工具,請將目前的目錄更改為 .NET 架構的安裝目錄(位於 %windir%\Microsoft.Net\Framework\v1.0.2914.16\)並鍵入 mscorcfg.msc 或 caspol.exe。
返回到頂部

基於證據的安全性如何與 Windows 2000 安全性一起使用?


基於證據的安全性(它授權碼)與 Windows 2000 安全性(它基於登入標識)一起使用。例如,為訪問檔案,Managed 程式碼必須既有程式碼存取安全性檔案許可權,還必須在具有 NTFS 檔案訪問權的登入標識下運行。.NET 架構中包含的託管庫還為角色型安全性提供了類。這些類使應用程式可以使用 Windows 登入標識和使用者組。
返回到頂部

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。