之前我發表了如何用C++開發ASP.NET,很多人懷疑用C++開發ASP.NET有什么好處?執行速度上有任何優勢嗎?第一個問題將在本篇隨筆解答,至于執行速度,我認為既然都是managed code,C++/CLI、C#、VB應該都一樣快,但C++/CLI有個特色,就是能在managed code中寫unmanaged code,類似C#的unsafe code,假如在C++/CLI中使用unmanaged code,是否能在速度上占便宜呢?我寫了以下的程序作測試。
為了克服array必須事先宣告大小的不便,STL和.NET都有解決的方式,在STL的container當中,速度最快的就是std::vector,而.NET當中就是ArrayList,所以我想測試在同樣的程序中,若使用unmanaged 的std::vector是否會比managed ArrayList快。


?2

?3

?4

?5

?6

?7

?8

?9

10

11

12

13

14

15

16

17



18

19

20

21

22

23



24

25

26

27

28

29

30

31

32

33

34

35

36



37

38

39

40

41

42

43

44

執行結果

2

3

執行結果令我訝異,我原本預期unmanaged的std::vector應該會比較快,但結果卻是managed的ArrayList較快,我覺得可能的原因是,managed的數據放在CLR內,而unmanaged數據放在不同的地方,當unmanaged的std::vector要在managed的執行環境中顯示時,還要經過marshaling的動作,所以浪費了一些時間,類似在.NET中使用COM的dll時,也必須經過marshaling,所以速度較慢。
回到我第一個問題,用C++開發ASP.NET有什么好處?在這個簡單的程序里可以發現,C++/CLI的最大特色,讓你可以將managed和unmanaged程序寫在一起,同時使用.NET Framework和傳統C++的library,如STL、boost,這是C#所做不到的,假如你的工程領域已經有很多library,是用C/C++寫的,可能是10幾年前的東西,目前根本沒有C#版本的library,而你又急需這些library的function開發.NET程序,C++/CLI就很方便了,讓你同時擁抱C/C++ library和.NET Framework,這也是Microsoft開發C++/CLI的原因。
結論
在C++/CLI開發managed code,執行速度不會比C#、VB快,雖然C++/CLI可以開發unmanaged code,但若.NET Framework有相對應的支持時,應先考慮.NET Framework,然后再考慮其它C++自己的library,當然C++/CLI不見的適合所有開發人員,但對于一些開發人員是很方便的。