国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

Microsoft .NET框架FAQ續(xù)

2024-07-10 13:02:10
字體:
供稿:網(wǎng)友

垃圾回收

什么是垃圾回收?


垃圾回收是一種機(jī)制,它使計(jì)算機(jī)能夠檢測到對象何時(shí)不能再被訪問。然后它自動釋放該對象所使用的內(nèi)存(同時(shí)調(diào)用由用戶編寫的稱為“終結(jié)程序”的清理例程)。有些垃圾回收器(如 .net 使用的垃圾回收器)壓縮內(nèi)存,從而減小程序的工作集。
返回到頂部

非確定性的垃圾回收如何影響代碼?


對于大多數(shù)程序員而言,擁有垃圾回收器(并使用垃圾回收對象)意味著即使使用復(fù)雜的數(shù)據(jù)結(jié)構(gòu),也不必?fù)?dān)心釋放內(nèi)存或引用計(jì)數(shù)對象。但是,如果您通常在釋放對象內(nèi)存的同一代碼塊中釋放系統(tǒng)資源(文件句柄、鎖等等),則確實(shí)需要在編碼樣式方面進(jìn)行某些更改。對于垃圾回收對象,應(yīng)提供一種以確定方式(即受程序的控制)釋放系統(tǒng)資源的方法,并使垃圾回收器可以在壓縮工作集時(shí)釋放內(nèi)存。
返回到頂部

可以避免使用垃圾回收堆嗎?


所有面向運(yùn)行庫的語言都允許從垃圾回收堆分配類對象。這帶來了快速分配方面的好處,并且使程序員不必計(jì)算出何時(shí)應(yīng)顯式“釋放”每個(gè)對象。
clr 還提供所謂的 valuetype。valuetype 與類相似,不同的是 valuetype 對象在運(yùn)行時(shí)堆棧(而不是堆)上分配,因此當(dāng)代碼退出定義了這些對象的過程時(shí)它們將被自動回收。這便是 c# 中“結(jié)構(gòu)”的操作方式。
c++ 托管擴(kuò)展使您可以選擇分配類對象的位置。如果由 __gc 關(guān)鍵字聲明為托管類,則它們從垃圾回收堆中分配。如果它們不包括 __gc 關(guān)鍵字,則它們的行為和常規(guī) c++ 對象類似,都是從 c++ 堆分配,并且由“free”方法顯式釋放。
有關(guān)垃圾回收的附加信息,請參閱:
  • 垃圾回收:microsoft .net 框架中的自動內(nèi)存管理
  • 垃圾回收(第 2 部分):microsoft .net 框架中的自動內(nèi)存管理

返回到頂部

遠(yuǎn)程處理

進(jìn)程內(nèi)和進(jìn)程間通訊在公共語言運(yùn)行庫中的工作機(jī)制是什么?


進(jìn)程內(nèi)通訊有兩個(gè)方面:單個(gè)應(yīng)用程序域中的上下文之間的通訊或應(yīng)用程序域之間的通訊。在同一應(yīng)用程序域的上下文之間,代理用作偵聽機(jī)制。不涉及任何封送處理或序列化操作。在跨越多個(gè)應(yīng)用程序域時(shí),我們使用運(yùn)行時(shí)二進(jìn)制協(xié)議進(jìn)行封送處理/序列化。
進(jìn)程間通訊使用可插接式信道和格式化程序協(xié)議,其中每個(gè)協(xié)議適用于特定的目的。
  • 如果開發(fā)人員使用工具 soapsuds.exe 指定端點(diǎn)以生成元數(shù)據(jù)代理,則默認(rèn)設(shè)置為具有 soap 格式化程序的 http 信道。
  • 如果開發(fā)人員在托管環(huán)境中進(jìn)行顯式的遠(yuǎn)程處理,則必須明確要使用的信道和格式化程序。這可以表示為管理形式,通過配置文件,或通過 api 調(diào)用加載特定的信道。選項(xiàng)為:
    具有 soap 格式化程序的 http 信道(http 非常適合在 internet 上使用或者通訊必須經(jīng)過防火墻的情況)
    具有二進(jìn)制格式化程序的 tcp 信道(tcp 是用于局域網(wǎng) (lan) 的性能更高的選項(xiàng))

當(dāng)在托管代碼和非托管代碼間進(jìn)行轉(zhuǎn)換時(shí),com 結(jié)構(gòu)(確切地說是 dcom)用于遠(yuǎn)程處理。在 clr 的中間版本中,這通過適用于被服務(wù)的組件(使用 com+ 服務(wù)的組件)。在最終發(fā)布時(shí),應(yīng)該可以配置任何可遠(yuǎn)程處理的組件。
對象的分布式垃圾回收由稱為“基于租約的生存期”的系統(tǒng)托管。每個(gè)對象均有一個(gè)租用時(shí)間,當(dāng)時(shí)間過期時(shí),對象會與 clr 的遠(yuǎn)程處理結(jié)構(gòu)斷開連接。對象都有默認(rèn)的續(xù)訂時(shí)間,當(dāng)從客戶端成功地調(diào)用了對象時(shí)續(xù)訂該租約。客戶端也可以顯式續(xù)訂租約。
返回到頂部

互操作性

可以在 .net 框架程序中使用 com 對象嗎?


可以。現(xiàn)已部署的任何 com 組件均可通過托管代碼中使用,通常情況下,改編是完全自動的。
具體說來,自動行為是使用運(yùn)行庫可調(diào)用的包裝 (rcw) 從 .net 框架訪問 com 組件。該包裝將 com 組件公開的 com 接口轉(zhuǎn)換成與 .net 框架兼容的接口。對于 ole 自動化接口,rcw 可以從類型庫中自動生成。而對于非 ole 自動化接口,開發(fā)人員可以編寫自定義 rcw,并將 com 接口公開的類型手動映射至與 .net 框架兼容的類型。
返回到頂部

可以在 com 程序中使用 .net 框架組件嗎?


可以。現(xiàn)已生成的托管類型可通過 com 訪問,通常情況下,配置是完全自動的。托管開發(fā)環(huán)境的某些新功能無法通過 com 訪問。例如,靜態(tài)方法和參數(shù)化構(gòu)造函數(shù)無法通過 com 使用。通常情況下,最好提前確定給定類型的預(yù)期用戶。如果要通過 com 使用類型,則可能只限于使用 com 可訪問的功能。
根據(jù)用于編寫托管類型的語言,默認(rèn)情況下,該類型可能是可見的,也可能是不可見的。
具體說來,自動行為是使用 com 可調(diào)用的包裝 (ccw) 從 com 訪問 .net 框架組件。這與 rcw 類似(請參閱前一個(gè)問題),但工作方向相反。此外,如果 .net 框架開發(fā)工具無法自動生成包裝,或者如果自動行為不是您所要的,則可以開發(fā)自定義 ccw。
返回到頂部

可以在 .net 框架程序中使用 win32 api 嗎?


可以。使用平臺調(diào)用,.net 框架程序可以通過靜態(tài) dll 入口點(diǎn)訪問本機(jī)代碼庫。
下面是一個(gè)調(diào)用 win32 messagebox 函數(shù)的 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 );     } }

返回到頂部

安全性

為使代碼適用于安全系統(tǒng),必須做哪些工作?


這通常不是問題,大多數(shù)應(yīng)用程序?qū)踩\(yùn)行,并且不會被惡意攻擊所利用。只需使用標(biāo)準(zhǔn)的類庫訪問資源(如文件)或執(zhí)行受保護(hù)的操作(如類型的私有成員反射),安全性便由這些庫得到加強(qiáng)。開發(fā)人員可能需要做的一件簡單的事是包括權(quán)限請求(聲明安全性的形式),以限制代碼可以接收的權(quán)限(限制為它需要的權(quán)限)。這還可確保在允許代碼運(yùn)行的情況下,只有具備了所需的所有權(quán)限才能這樣做。
只有編寫新基類庫公開新的資源類型的開發(fā)人員才需要直接使用安全系統(tǒng)。不是使所有的代碼都有潛在的安全危險(xiǎn),代碼訪問安全性將危險(xiǎn)限制在顯式重寫安全系統(tǒng)的極少量代碼上。
返回到頂部

為什么在從網(wǎng)絡(luò)共享驅(qū)動器運(yùn)行代碼時(shí)收到安全性異常?


默認(rèn)的安全策略只向來自本地 intranet 區(qū)域的代碼授予一組有限的權(quán)限。該區(qū)域由 internet explorer 安全設(shè)置定義,并且應(yīng)配置為與企業(yè)中的本地網(wǎng)絡(luò)匹配。由于由 unc 或映射驅(qū)動器命名(如用 net use 命令)的文件通過該本地網(wǎng)絡(luò)發(fā)送,這些文件也在本地 intranet 區(qū)域中。
默認(rèn)值是針對不安全 intranet 的最壞情況設(shè)置的。如果您的 intranet 比較安全,則可以修改安全策略(用 .net 框架配置工具或 caspol 工具),向本地 intranet 或它的各部分(例如特定的計(jì)算機(jī)共享名稱)授予更多權(quán)限。
返回到頂部

如何使代碼在安全系統(tǒng)停止它時(shí)運(yùn)行?


當(dāng)代碼試圖執(zhí)行無權(quán)執(zhí)行的操作時(shí)會發(fā)生安全性異常。權(quán)限的授予基于已知的代碼情況,尤其是它的位置。例如,從 internet 運(yùn)行的代碼比從本地計(jì)算機(jī)運(yùn)行的代碼獲得的權(quán)限少,因?yàn)榻?jīng)驗(yàn)證明前者通常不如后者可靠。因此,為了使因安全性異常而失敗的代碼運(yùn)行,必須增加授予它的權(quán)限。這樣做的一個(gè)簡單方法是將代碼移至更受信任的位置(如本地文件系統(tǒng))。但這并不適用于所有情況(web 應(yīng)用程序便是一個(gè)很好的例子,公司網(wǎng)絡(luò)上的 intranet 應(yīng)用程序是另一個(gè)例子)。因此,如果不改變代碼的位置,還可以更改安全策略,向該位置授予更多權(quán)限。使用 .net 框架配置工具或代碼訪問安全策略實(shí)用工具(caspol.exe)都可以做到這一點(diǎn)。如果您是代碼開發(fā)人員或發(fā)布者,則還可以為代碼加上數(shù)字簽名,然后修改安全策略,向帶該簽名的代碼授予更多權(quán)限。但是,在采用上述任何操作時(shí),請記住給代碼授予的權(quán)限要少些,這是因?yàn)樗皇莵碜钥勺R別的可靠源。在將代碼移至本地計(jì)算機(jī)或更改安全策略前,應(yīng)確保信任代碼不會執(zhí)行惡意的或損害性操作。
返回到頂部

如何管理個(gè)人計(jì)算機(jī)的安全性?如何管理企業(yè)計(jì)算機(jī)的安全性?


.net 框架包括 .net 框架配置工具——mmc 管理單元(mscorcfg.msc)以配置包括安全策略在內(nèi)的 clr 的若干方面。該管理單元不僅支持在本地計(jì)算機(jī)上管理安全策略,而且還創(chuàng)建與系統(tǒng)管理服務(wù)器和組策略兼容的企業(yè)策略部署包。命令行實(shí)用工具 caspol.exe 也可用于計(jì)算機(jī)上的腳本策略更改。為了在命令提示中運(yùn)行任一種工具,請將當(dāng)前目錄更改為 .net 框架的安裝目錄(位于 %windir%/microsoft.net/framework/v1.0.2914.16/)并鍵入 mscorcfg.msc 或 caspol.exe。
返回到頂部

基于證據(jù)的安全性如何與 windows 2000 安全性一起使用?


基于證據(jù)的安全性(它授權(quán)代碼)與 windows 2000 安全性(它基于登錄標(biāo)識)一起使用。例如,為訪問文件,托管代碼必須既有代碼訪問安全性文件權(quán)限,還必須在具有 ntfs 文件訪問權(quán)的登錄標(biāo)識下運(yùn)行。.net 框架中包含的托管庫還為基于角色的安全性提供了類。這些類使應(yīng)用程序可以使用 windows 登錄標(biāo)識和用戶組。
返回到頂部
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 房产| 皮山县| 朔州市| 获嘉县| 海门市| 远安县| 宁武县| 荃湾区| 平顺县| 连江县| 西畴县| 铜川市| 紫金县| 米易县| 固镇县| 兴国县| 阿巴嘎旗| 额尔古纳市| 甘谷县| 平谷区| 攀枝花市| 随州市| 姜堰市| 库车县| 新源县| 浪卡子县| 固镇县| 集安市| 和平区| 库尔勒市| 衡阳县| 泰来县| 沛县| 怀来县| 玉龙| 广水市| 綦江县| 西平县| 郁南县| 礼泉县| 清远市|