官术网_书友最值得收藏!

1.5.1 Windows平臺的運行時

很早之前的最基礎的Win32平臺,在此平臺上,不同編程語言間編譯的可執行程序是不可以互操作的。

Win32平臺的架構圖如圖1-7所示。

圖1-7

直到后來COM(Component Object Model)的出現,帶來了諸多福利:標準的內存模型和內存管理,多語言可互操作,松耦合,等等。但同時也帶來了新的問題:程序很脆弱,且不容易調試;技術復雜,難以理解;DLL災難。

NET的出現,使用CLR作為執行環境,讓多語言間能夠更容易地互操作:

· 支持數十種編程語言;

· 只有很少的運行時版本(CLR);

· FCL集成了很多高級功能,比如WCF、WPF、TPL,等等。

.NET的也有新的問題:

· 與非CLR組件互操作很痛苦,比如標準C++;

· 對CLR的依賴本身也是一個問題;

· 托管代碼存在性能問題;

· 不支持HTML和JavaScript。

Windows Runtime是Windows平臺新一代可互操作的API。WinRT與COM很像,與COM的共同點是:

· 都是基于接口的;

· 都使用GUID來標識組件;

· 都通過引用計數來管理生命周期;

· 線程模型是由Apartment Style決定的。

但是要強調的是,WinRT:不是COM,不是基于Win32的,不是跨平臺的,不是托管環境。

WinRT還擴展了COM沒有的幾個方面:靜態方法,屬性,代理和事件,元數據和RTTI。

Windows Runtime的架構圖如圖1-8所示。

圖1-8

可以看到,Windows Runtime直接運行在Windows 8的內核上,既不是CLR,也不是Win32和COM上,所以它是一個本地(Native)運行時。它與.NET的運行時CLR是平行關系,而不是依賴關系。

Windows Runtime支持JS、C++、C#等語言開發,可以用HTML+CSS、DirectX或XAML作為表現層。當用這三種語言開發時,它們的執行層次關系如圖1-9所示。

圖1-9

· 當用JavaScript開發Windows商店應用時,WWAHost作為解釋JavaScript的容器。

· 當用C++/CX開發Windows商店應用時,直接運行在Windows Runtime上。

· 當用C#/VB.NET開發Windows商店應用時,C#/VB.NET仍然運行在CLR上。Windows商店應用會加載整個.NET 4.5的CLR,JIT、GC、IL等特性仍然可用。

使用C#/VB.NET開發的Windows商店應用時運行模型如圖1-10所示。

圖1-10

CLR與Windows Runtime通過一些進制進行交互,因為它們的元數據很像,所以交互的開銷很小。但如果交互的量很大,還是需要注意。

CLR通過RCW(Runtime Callable Wrapper)的方法將Windows Runtime的對象封裝成CLR可識別的托管代碼。

Windows Runtime通過CCW(COM Callable Wrapper)的方法將CLR的對象封裝成Windows Runtime可識別的本地代碼。叫COM的原因是Windows Runtime的結構與COM很像。

Windows Runtime與.NET互操作的方式如圖1-11所示。

圖1-11

一些使用擴展方法,比如:

· CLR的Stream和Windows Runtime中的Stream之間進行轉換——使用System.IO.Windows RuntimeStreamExtensions擴展類。

· CLR的文件操作和Windows Runtime中的文件操作之間進行轉換——使用System.IO. WindowsRuntimeStorageExtensions擴展類。

由于Windows Phone 8的核心系統與Windows 8相同,所以在Windows Phone 8上也有一個Windows Runtime的版本,叫做Windows Phone Runtime,簡稱WinPRT,但只能使用C#、VB.NET和C++/CX開發,不支持JavaScript。

主站蜘蛛池模板: 华亭县| 泸水县| 海丰县| 大埔县| 广水市| 阿鲁科尔沁旗| 红桥区| 佛学| 札达县| 射阳县| 胶南市| 久治县| 克什克腾旗| 英德市| 八宿县| 合阳县| 贡山| 额济纳旗| 黑水县| 陇川县| 长武县| 罗甸县| 平武县| 崇左市| 昌都县| 塘沽区| 丹巴县| 孟村| 新源县| 乌鲁木齐县| 琼海市| 来安县| 邢台市| 蓝田县| 邢台市| 江西省| 犍为县| 怀柔区| 茌平县| 白水县| 武清区|