之前我發表了如何用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快。
執行結果
執行結果令我訝異,我原本預期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不見的適合所有開發人員,但對于一些開發人員是很方便的。