【正文】
要使用內(nèi)存。雖然這在理論上聽(tīng)起來(lái)完善,但在實(shí)踐中卻有幾個(gè)問(wèn)題。最常見(jiàn)的是循環(huán)引用問(wèn)題,即一個(gè)對(duì)象到另一個(gè)對(duì)象,它本身包含一個(gè)回到第一個(gè)對(duì)象的引用。當(dāng)內(nèi)存管理的對(duì)象不使用它們看起來(lái) 時(shí)候 的摸樣時(shí),這些對(duì)象將始終大于零。因此,除非它們是隱式解構(gòu),不然他們的內(nèi)存可能永遠(yuǎn)不會(huì)被發(fā)現(xiàn)。 C或 C++程序員的習(xí)慣是 自己 銷(xiāo)毀對(duì)象, 因?yàn)?他 們能管理其自有的內(nèi)存。他們不信任任何人能利用管理資源并將之照顧好。然而,在 .NET環(huán)境下,微軟正在努力使軟件開(kāi)發(fā)更加容易。在本章 后面的內(nèi)容,我們涉及 .NET如何進(jìn)行已經(jīng)經(jīng)過(guò)嚴(yán)格的引用計(jì)數(shù)或手動(dòng)內(nèi)存管理方法改進(jìn)的垃圾收集工作。 支持的版本 誰(shuí)如果不理解 ―DLL HELL‖,那就是他尚未開(kāi)發(fā) Windows(或至少支持)軟重慶大學(xué)本科生畢業(yè)論文翻譯 5 件很長(zhǎng)時(shí)間。對(duì)于外行,當(dāng)客戶(hù)使用您的應(yīng)用程序相同的 DLL之一安裝了一個(gè)軟件包時(shí),你會(huì)發(fā)現(xiàn)自己就身在 DLL HELL之中。但是,所有開(kāi)發(fā)人員總是把每件事情都向后 100%兼容,就像您的應(yīng)用程序使用此 DLL的版本 ,新的 版本能兼容 ,對(duì)不對(duì)? 當(dāng) 新的 DLL使您的應(yīng)用程序表現(xiàn)出一些奇怪的問(wèn)題或者完全停止 工作 的時(shí)候, 你要經(jīng)過(guò)大量調(diào)查找出有問(wèn)題的 DLL是什么,并用新的版本替換您的軟件版本。 但是,如果 現(xiàn)在他們的新軟件不工作 了 , 那么 就是 DLL HELL發(fā)揮作用了。 當(dāng)應(yīng)用程序加載 庫(kù)時(shí),許多開(kāi)發(fā)人員僅需要采取安裝每個(gè) DLL的應(yīng)用程序需要的目錄 的方法 。這雖然違背了共享庫(kù)的目的,但它是一個(gè)解決問(wèn)題的方法。 COM以前是這樣的 : 你 以前 從來(lái)沒(méi)有改變一個(gè)方法接口,你只 是 添加新的方法。不幸的是,軟件開(kāi)發(fā)人員經(jīng)常是 玩弄 主義者, 留下 一些 ―漏洞 ‖的功能玩弄一些人。問(wèn)題是,一旦在使用時(shí)產(chǎn)生了不良的客戶(hù)端軟件,那么改變一個(gè)組件的接口會(huì)被 以前 的 所謂添加新的方法的 行為影響。 不過(guò)它也有解決方法, 由于 COM對(duì)象是被加載在注冊(cè)表中的信息,所以只需替代該 DLL或應(yīng)用程序目錄,那么這個(gè)問(wèn)題便不會(huì)發(fā)生。 現(xiàn)在, .NET 架構(gòu)將應(yīng)用程序組件分開(kāi),這樣應(yīng)用程序就能總是加載與它建立和測(cè)試相關(guān)的元件。如果應(yīng)用程序安裝運(yùn)行后,應(yīng)用程序應(yīng)該始終運(yùn)行。這是通過(guò)程序集和 .NET的封裝組件實(shí)現(xiàn)的。雖然目前的 DLL和 COM的對(duì)象包含了許多不同 的 版本信息,但是操作系統(tǒng)不會(huì)真正使用任何這些信息。程序集包含了 .NET公共語(yǔ)言運(yùn)行時(shí)使用的版本信息,以確保應(yīng)用程序 在 加載它 時(shí) 建立 使用組 件。我們將在后面的章節(jié)涵蓋了更多關(guān)于配件和版本如何工作的內(nèi)容。 支持的開(kāi)放標(biāo)準(zhǔn) 在今天的世界上,不是每個(gè)你可能工作的設(shè)備都是運(yùn)行微軟操作系統(tǒng)或使用英特爾處理器。 為了 實(shí)現(xiàn) 開(kāi)放的標(biāo)準(zhǔn) , .NET的建構(gòu)是基于 XML和 SOAP的, 它將使你 可以通過(guò) Inter 激活 應(yīng)用程序,而不論其背后依托標(biāo)準(zhǔn)的信息基礎(chǔ)是什么設(shè)施。 SOAP 將為不同的系統(tǒng)提供容易的交換信息的方法, 而且更好的是 , SOAP允許您調(diào)用遠(yuǎn)程系統(tǒng)的方法和返回結(jié)果。因?yàn)?SOAP 是一個(gè)類(lèi)似于 HTTP 的簡(jiǎn)單的基于文本的協(xié)議,它可以輕易地穿過(guò)防火墻,不像 DCOM或 CORBA。 由 .NET平臺(tái)提供的其他標(biāo)準(zhǔn)包括通用描述,發(fā)現(xiàn)和集成( UDDI) 以及 它們的XML接口和 Web 服務(wù)描述語(yǔ)言( WSDL),它描述了一個(gè)應(yīng)用程序代碼做目錄。通過(guò)許多基于開(kāi)放標(biāo)準(zhǔn) .NET的基礎(chǔ)并 向 ECMA(一個(gè)國(guó)際標(biāo)準(zhǔn)組織)提交對(duì) C#和 .NET公共語(yǔ)言基礎(chǔ)結(jié)構(gòu)的標(biāo)準(zhǔn)草案,微軟希望 籍由 軟件的未來(lái)版本看到其超出自己的 領(lǐng) 域。 配置簡(jiǎn)單 今天,基于 Windows 的應(yīng)用程序 的 開(kāi)發(fā) 和 安裝達(dá)到 了 令人難以置信的困難 。由于這一點(diǎn),大多數(shù)公司 對(duì)于 用于開(kāi)發(fā)他們的安裝程序的第三方工具 很不滿(mǎn)意 。通常 需要 在幾個(gè)目錄中安裝 大量 的文件, 設(shè)置 各種注冊(cè)表, 安裝 所需的 COM 組件 和 建立 快捷方式等等。完全卸載的應(yīng)用程序幾乎是不可能的,即使他們提供卸載功能,大多數(shù)仍會(huì)遺留很多字節(jié)以及碎片。隨著 Windows2021的發(fā)布,微軟引入了一個(gè)新的安裝引擎幫助解決這些問(wèn)題 ,但它仍然有可能是一個(gè) 不正常 的微軟安裝程序包。即使 專(zhuān)門(mén)設(shè)計(jì) 一種 第三方 軟件 ,使 得 更容易開(kāi)發(fā) 一些 工具,但要正確 地 在檢索中 安裝一個(gè)應(yīng)用仍然是一項(xiàng)艱巨的任務(wù)。 .NET設(shè)計(jì)隊(duì)伍面對(duì)這個(gè)問(wèn)題 同樣 感到了的困惑, 但 .NET隊(duì)伍 計(jì)劃將這些問(wèn)題解決 了 。 .NET組件中不引用注冊(cè)表,由于元數(shù)據(jù)和引用的使 用,組件描述是自發(fā)重慶大學(xué)本科生畢業(yè)論文翻譯 6 的。事實(shí)上, 安裝 大部分 .NET應(yīng)用程序僅僅需要將他們的文件復(fù)制到一個(gè)目錄,卸載應(yīng)用程序?qū)⒅皇莿h除這些文件。 分布式體系結(jié)構(gòu) 今天的分布式應(yīng)用程序與未來(lái)的 那些 仍然 有很大的不同。微軟堅(jiān)定地認(rèn)為:他們十分看好分布式 Web服務(wù)概念的公司。例如, 現(xiàn)在, 當(dāng)用戶(hù)與門(mén)戶(hù)網(wǎng)站互動(dòng) 時(shí) ,在 他們 看來(lái) 是與一個(gè)遠(yuǎn)程服務(wù)器 打交道。我們大多數(shù)人都知道,通常情況并非如此,至少在 那些 大規(guī)模的網(wǎng)站上不是這樣 的 。 其實(shí)是 各種服務(wù)器和應(yīng)用程序在后臺(tái) 運(yùn)行,當(dāng) 訪問(wèn)幾個(gè)遠(yuǎn)程站點(diǎn)的信息 時(shí) , 服務(wù)器 結(jié)合自己的用戶(hù)信息數(shù)據(jù)庫(kù), 合并成一個(gè)集成產(chǎn)品 ,用戶(hù) 則瀏覽 傳遞到瀏覽器上的 信息 。 由于這些類(lèi)型的應(yīng)用很有用,他們的開(kāi)發(fā)和維護(hù)都非常 的 復(fù)雜。每條信息提供商已經(jīng)開(kāi)發(fā)不同的接口來(lái)訪問(wèn)他們的服務(wù)器上的數(shù)據(jù)和流程。這是非常低效的重復(fù)建設(shè),并在大多數(shù)情況相當(dāng)乏味,所以在許多活動(dòng)已經(jīng)形成了三個(gè)標(biāo)準(zhǔn)以簡(jiǎn)化流程: XML, SOAP和 UDDI。正如我們前面討論的,這些都是用來(lái)在 .NET并都在競(jìng)爭(zhēng)。 但是, 少為人知 的是, 這些都是 IBM和 Sun的倡議。 與非托管代碼的互用 正如你可能已經(jīng)猜到了,與非托管代碼是不被 .NET 公共語(yǔ)言運(yùn)行庫(kù)管理的代碼。但是,此代碼仍然是由 CLR運(yùn)行 時(shí),它只是沒(méi)有得到諸如通用類(lèi)型系統(tǒng)和自動(dòng)內(nèi)存管理優(yōu)勢(shì)。您最終可能會(huì)在不同的情況使用不同的代碼 ■調(diào)用 DLL函數(shù) 現(xiàn)在有許多函數(shù)都綁定了 DLL。 并不是每一個(gè)公司都要急于推出的 .NET產(chǎn)品組件的版本,所以如果你需要接觸他們,你會(huì)調(diào)用與非托管代碼。 ■使用 COM組件 這應(yīng)該是你調(diào)用 DLL函數(shù)的相同原因。 ■從 COM組件中調(diào)用 .NET服務(wù) 雖然這聽(tīng)起來(lái)有點(diǎn)古怪,但它是可能的。一個(gè) COM客戶(hù)端可以調(diào)用 .NET組件,就好像這是一個(gè) COM服務(wù)器一樣。 這里有一點(diǎn)關(guān)于 COM互用問(wèn)題的更多信息。微軟并沒(méi)有想迫使公司放 棄現(xiàn)有的 COM組件,特別是因?yàn)楝F(xiàn)在微軟自己的產(chǎn)品很多是基于 COM的 .COM組件中的消息,這些消息是在 .NET運(yùn)行 的時(shí)候 ,它的互操作層通過(guò)非法侵占來(lái)處理所有管理運(yùn)行和 COM組件系統(tǒng)之間 翻譯時(shí) 傳遞的,就像與非托管代碼一樣。 在這其中的另一面,有公司出于對(duì) .COM 技術(shù)的既得利益考慮,可能想使用 .NET平臺(tái)的一些零零碎碎的功能 之后 , 然后 才 會(huì) 采取堅(jiān)持 .COM客戶(hù)端可以方便地通過(guò) COM 非法侵占 層與 .NET組件聯(lián)系。 譯文原出處 : C.NET 開(kāi)發(fā)者指南 C . N ET Web Developer39。s Guide Adrian Turtschi, , Jason Werry, Greg Hack, Joseph Albahari, Saurabh Nandu 技術(shù)編輯 , Wei Meng Lee 資深編輯 重慶大學(xué)本科生畢業(yè)論文翻譯 7 原文: C .NET Web Developer39。s Guide Foreword Seldom in the history of puter software has any technology received such a positive response from developers and the industry, even while the technology is still in its nascent beta stage. The .NET Beta2 SDK from Microsoft has already been downloaded by millions of developers all over the world. Dozens of published books, Web sites and newsgroups devoted to the .NET platform, and relevant technical knowhow. Microsoft has invested billions of dollars and years of research in the creation of .NET. .NET is a prehensive strategy, consisting of operating systems, database servers, application servers, and the .NET Runtime, as well as managed languages that operate over the .NET platform. Some people think of the .NET platform as the practical implementation of the previously formulated Windows DNA. Others consider it as a response to developers’ ticklers of working with previous technologies and languages. Nevertheless, the mon misunderstanding still exists, simply assuming that .NET is the mere improvement over previous Microsoft technologies. In fact, the .NET platform has started from scratch, with such goals as security, scalability, reliability, flexibility, and interoperability, thereby making the .NET accessible to platform enterprise. The .NET platform displays a significant shift of Microsoft’s thinking. While building the .NET platform, Microsoft has shown strong support for open standards like XML, SOAP, and UDDI, rather than building its own proprietary standards and technologies. Even the core part of the .NET platform—the Common Language Infrastructure (CLI)—and the C specifications have been placed before ECMA for standardization. C, developed by Anders Hejlsberg of Microsoft, is defined as a simple, modern, objectoriented, and typesafe programming language derived from C and C++, deriving from a number of languages like C, C++, and Java. Specifically written to offer the simplicity of Visual Basic and power of C++ as an objectoriented language, C makes it easier for developers to create, debug, and deploy enterprise applications. It has also been predicted that C will bee the favored language for developing applications on the .NET platform. Visual , the next version of Visual Studio IDE, is also a key ponent of the .NET strategy. The Visual IDE has also been given a facelift and packed with a wide variety of new functionalities. A bitmap editor, debugger, Web Forms designer, Windows Form