.NET Framework是Microsoft為跨平臺開發(fā)應(yīng)用程序而創(chuàng)建的一個富有革命性的平臺。為了實現(xiàn)其跨平臺開發(fā)的目標(biāo),.NET Framework采用了不同于傳統(tǒng)的應(yīng)用程序編譯模式,例如:在VS2003/VS2005/VS2008編譯.NET Framewrok所編寫的代碼時,不是立即創(chuàng)建操作系統(tǒng)特定的本機(jī)代碼,而是把代碼編譯為Microsoft中間語言(Microsoft Intermediate Language,MSIL),這些代碼不專用于任何一種操作系統(tǒng),也不專用于C#;要執(zhí)行應(yīng)用程序,是Just-In-Time(JIT)編譯器的任務(wù),它把MSIL編譯為專用于OS和目標(biāo)機(jī)器結(jié)構(gòu)的本機(jī)代碼。
這樣,帶來的好處是顯而易見的,它使得Studio.NET這樣的開發(fā)工具不僅可以開發(fā)PC桌面應(yīng)用程序,而且還可以開發(fā)WinCE應(yīng)用程序,未來還可以支持更多的應(yīng)用平臺;但是,一個硬幣都有兩面,我們還是要懷疑一下這種模式的應(yīng)用效率。為此我們通過在VS2005 C#開發(fā)的調(diào)用COM組件的應(yīng)用程序做了實驗。
實驗使用英創(chuàng)EM9161嵌入式主板(主頻200MHz)和ETA102數(shù)采模塊采集外部10個通道電壓。采用兩種模式:
(1)在C#應(yīng)用程序里面直接編寫采集AD的函數(shù)。因為ETA102數(shù)據(jù)采集模塊直接與EM9161的精簡ISA總線連接,通過英創(chuàng)的ISA總線進(jìn)行采集控制。英創(chuàng)提供了ISA總線接口的COM組件,所以該直接用C#編寫的函數(shù)將反復(fù)調(diào)用ISA COM組件,大略統(tǒng)計采集一次數(shù)據(jù)將調(diào)用COM組件函數(shù)50次左右。
(2)用eVC編寫采集AD的應(yīng)用代碼,然后將該代碼統(tǒng)一打包成一個COM組件,在C#的應(yīng)用程序直接調(diào)用該COM組件函數(shù)使用,也就是說,進(jìn)行一次數(shù)據(jù)采集只調(diào)用一次COM組件函數(shù)。
如上兩種模式,實現(xiàn)的目的和功能完全一致,我們將數(shù)據(jù)采集的次數(shù)延長,比如采集幾千次AD數(shù)據(jù),然后統(tǒng)計所花費的時間,發(fā)現(xiàn)方式(1)所耗費的時間數(shù)倍于采用方式(2),我們得到一個簡單結(jié)論,C#調(diào)用COM組件的效率較低,反復(fù)調(diào)用COM組件大量地消耗了系統(tǒng)資源和時間。為此,我們進(jìn)行了簡單的計算。為了計算的參照性,我們引用了eVC同樣的應(yīng)用程序執(zhí)行數(shù)據(jù)采集所花費的時間作為參考時間。那么,可以這樣認(rèn)為:
程序運行總時間 = 花費在實際數(shù)據(jù)采集的時間+COM組件消耗的時間+其它系統(tǒng)小開銷
其中,“其它系統(tǒng)小開銷”在數(shù)據(jù)采集次數(shù)足夠多的情況下,可以忽略不計,“花費在實際數(shù)據(jù)采集上的時間”采用eVC應(yīng)用程序所得到的數(shù)據(jù),那么,我們可以對方式(1)和(2)進(jìn)行一個簡單計算,實際結(jié)果是:方式(1)和方式(2)得到的調(diào)用一次COM組件應(yīng)用函數(shù)所耗費的時間均是17us,結(jié)果驚人的一致。
實驗硬件環(huán)境 |
英創(chuàng)EM9161工控主板+ETA102數(shù)采模塊 |
軟件 | VS2005 C# |
一次COM組件調(diào)用時間 | 17us |
根據(jù)上述實驗,我們可以得到在.NET Framework環(huán)境C#應(yīng)用程序開發(fā)中COM組件的調(diào)用效率原則:即COM組件功能本身的執(zhí)行時間應(yīng)大于17us,才可能保證C#應(yīng)用程序具有較高的執(zhí)行效率。例如在方式(1)中,每次ISA總線執(zhí)行的時間只有0.5us,因此若在C#程序中通過反復(fù)進(jìn)行ISA總線的COM組件調(diào)用,則實際代碼效率就肯定很低;而在方式(2)中,采用專門的AD采集COM組件,可實現(xiàn)一次采集多個樣點,每個樣點的采集時間為45us,因此,若C#在調(diào)用該COM組件時,采用一次采集10個樣點的策略,則可獲得很高的代碼效率。總之,為了保證使用C#等“高級”語言(其他的類似語言有.NET VB、LabView等)進(jìn)行應(yīng)用開發(fā)的時候具有合理的代碼執(zhí)行效率,對需反復(fù)大量調(diào)用COM組件函數(shù)應(yīng)仔細(xì)了解COM組件函數(shù)的實際執(zhí)行時間,對執(zhí)行時間小于17us的函數(shù),需特別謹(jǐn)慎,否則將耗費大量系統(tǒng)資源。
-
嵌入式主板
+關(guān)注
關(guān)注
7文章
6097瀏覽量
36155
發(fā)布評論請先 登錄
英創(chuàng)支持Linux高級客戶自行移植內(nèi)核
C#教程之調(diào)用Outlook發(fā)送郵件
英創(chuàng)信息技術(shù)利用COM組件遠(yuǎn)程更改設(shè)備配置文件的流程

英創(chuàng)信息技術(shù)ARM9工控板串口設(shè)備的COM組件應(yīng)用
英創(chuàng)信息技術(shù)C#使用COM組件接口操作精簡ISA總線淺談

英創(chuàng)信息技術(shù)CAN接口COM組件在C#語言領(lǐng)域應(yīng)用

英創(chuàng)信息技術(shù)C#使用COM組件接口進(jìn)行串口操作介紹

英創(chuàng)信息技術(shù)WinCE平臺C#例程要點介紹

英創(chuàng)信息技術(shù)C#通過串口讀取GPS模塊定位數(shù)據(jù)的方法

英創(chuàng)信息技術(shù)C#啟動和關(guān)閉外部進(jìn)程的方法介紹
英創(chuàng)信息技術(shù)嵌入式系統(tǒng)設(shè)備驅(qū)動接口的C#編程
英創(chuàng)信息技術(shù)嵌入式系統(tǒng)通訊線程的C#編程方法
英創(chuàng)信息技術(shù)C/C#開發(fā)基于WEC7的CAN通訊介紹

英創(chuàng)信息技術(shù)JAVA操作英創(chuàng)主板SPI接口簡介

英創(chuàng)信息技術(shù)JAVA操作英創(chuàng)主板I2C接口簡介

評論