最初接觸.net framework的時候是2002年,那時還是beta版本。看到微軟描述的.net framework未來的規(guī)劃藍圖后,被蓋茨忽悠的熱血賁張,感覺.net是未來的發(fā)展方向,并可以解決當前用戶所遇到的一些問題。當時還給國內的一家知名的組態(tài)軟件廠商提交了一份研發(fā)報告,可惜沒被采納。
說實話,剛開始利用.net開發(fā)工控軟件的時候還是存在諸多擔心,主要擔心有以下幾點,與各位博友分享:
性能問題
由于.net framework是在API上又封裝了一層,因此無疑會帶來運行效率上的問題。而對于工控軟件,程序的運行效率又是極為關鍵的要素之一,這是我們當初所最為擔心的地方。事實上,影響程序運行效率的最關鍵因素在于系統(tǒng)架構和編碼人員。有資料顯示,采用C++編寫的程序與采用C#編寫的程序在性能上相差無幾,相對于程序員水平和對系統(tǒng)運行效率重視程度而導致的差異幾乎可以忽略不計。
想當初聽說.net的裝箱拆箱操作對系統(tǒng)性能影響較大,而在程序中對數(shù)據(jù)進行了特殊處理,現(xiàn)在看來完全沒有必要。一來到了.net framework 2.0裝箱拆箱效率有了較大改善,二來這樣的設計對于程序的擴展性有較大的影響。
開發(fā)資源問題
經(jīng)過廣大程序員的努力,目前在windows平臺下積累了大量可重用性資源,如各種組件、ActiveX控件等等,這也是windows平臺下軟件開發(fā)的優(yōu)勢之一。當初我們擔心在.net平臺下開發(fā)資源太少,加上工控軟件一般來說會比潮流慢半拍,所有工作都需要自己來做,這是我們所擔心的地方。
事實證明,我們的這種擔心也是多余的。大家可以看到,目前在.net平臺下的編程隊伍飛速擴展,各種winform控件不斷推出。就連著名的ComponentOne也很快推出了.net下的控件集。
此外需要說明的是.net對過去的com和ActiveX控件同樣支持,在發(fā)布的易控軟件中,可以很容易的添加ActiveX控件。
API調用問題
這是一個比較撓頭的問題,由于.net下的資源相對有限,有時不得不利用調用非托管代碼的方式調用第三方庫。由于調試工具的缺乏,有時出了問題不知問題之所在。記得2003年在調用國外知名硬件廠家提供的動態(tài)庫時,總是不能成功,折騰了近一個星期,在網(wǎng)上搜索了N多英文資料,最終發(fā)現(xiàn)是.net framework 1.0的bug。
也許有博友要問,在.net平臺上利用C#開發(fā)組態(tài)軟件到底給你們帶來哪些好處呢?經(jīng)過近幾年的實踐,可以說好處是大大的,下面就我自己的感覺列出幾條,同時也是針對微軟當年的承諾(也就是.net吸引我的地方)看微軟兌現(xiàn)了哪些。
內存垃圾回收不再發(fā)生內存泄漏
這一點應該是部分做到。我們知道,用VC編寫win32程序最頭疼的就是內存泄漏問題,在家里測試不到而在用戶那里被頻繁調用的內存泄漏代碼會造成內存的不斷上漲。這也是過去許多用戶抱怨機器頻繁死機的主要原因。
感謝微軟,.net的垃圾回收機制將程序員從這種緊張繁重的工作中解脫出來。至今為止,易控的用戶(包括那些每天24小時不停機的鋼廠用戶)還從未報過運行系統(tǒng)死機的問題。
說它部分做到是因為有些代碼,主要是GDI+相關代碼還需要手工釋放資源句柄。
.net程序可以跨平臺運行
從理論上講,.net程序運行在.net framework平臺上,與操作系統(tǒng)無關。但事實上這一點可能要落空了,雖說有novell開發(fā)的mono提供Linux平臺上的.net framwork,但一來mono的開發(fā)遠遠滯后與.net framework的更新,二來程序難免有部分地方需要調用底層API。設想程序可以無縫移植到Linux上目前不太現(xiàn)實。
程序在網(wǎng)絡上運行如同在單機上運行
這一點微軟做的比較好,無論是早期的.net Remoting還是現(xiàn)在的WCF,訪問遠程對象幾乎同訪問本機對象一樣簡單,只需添加幾條指令即可。這也為開發(fā)基于網(wǎng)絡的組態(tài)軟件提供了強大的武器。尤其是WCF,支持多種通道,并可以方便地更換通道,感興趣者可以參考WCF的教程。
桌面應用程序和Web應用程序采用同一套代碼
這點直到.net framework 3.0才得以實現(xiàn),并且Web程序仍然存在訪問安全機制的問題。但無論如何對組態(tài)軟件的開發(fā)者來講都是一個福音,再也無需為了支持Web發(fā)布重新編寫大量的代碼了,不過前提條件是將你的圖形改成WPF圖形元件,從WPF提供的強大功能來看還是值得的。
豐富的圖形界面
凡是用過易控的用戶無不對其精美的畫面贊不絕口,這是利用.net對GDI+的支持實現(xiàn)的,目前的WPF還提供了對2D和3D動畫的支持,這是通過封裝DirectX實現(xiàn)的。想像一下,編寫一個支持2D和3D圖形動畫的組態(tài)軟件是不是很酷?
.net平臺還有許多引人入勝的地方,在此不一一列舉。事實上,.net對我影響最大是其以xml語言描述配置的設計,這使得我們的架構具有高度的靈活性和可擴展性。基于服務的思想使得我們的模塊可以靈活的部署在網(wǎng)絡上。此外,除了C#語言的其他優(yōu)點外,我認為C#是一款真正面向對象的語言,你認為如何呢?