.NET Framework是Microsoft为跨平台开发应用程序而创建的一个富有革命性的平台。为了实现其跨平台开发的目标,.NET Framework采用了不同于传统的应用程序编译模式,例如:在VS2003/VS2005/VS2008编译.NET Framewrok所编写的代码时,不是立即创建操作系统特定的本机代码,而是把代码编译为Microsoft中间语言(Microsoft Intermediate Language,MSIL),这些代码不专用于任何一种操作系统,也不专用于C#;要执行应用程序,是Just-In-Time(JIT)编译器的任务,它把MSIL编译为专用于OS和目标机器结构的本机代码。
这样,带来的好处是显而易见的,它使得Studio.NET这样的开发工具不仅可以开发PC桌面应用程序,而且还可以开发WinCE应用程序,未来还可以支持更多的应用平台;但是,一个硬币都有两面,我们还是要怀疑一下这种模式的应用效率。为此我们通过在VS2005 C#开发的调用COM组件的应用程序做了实验。
实验使用英创EM9161嵌入式主板(主频200MHz)和ETA102数采模块采集外部10个通道电压。采用两种模式:
(1)在C#应用程序里面直接编写采集AD的函数。因为ETA102数据采集模块直接与EM9161的精简ISA总线连接,通过英创的ISA总线进行采集控制。英创提供了ISA总线接口的COM组件,所以该直接用C#编写的函数将反复调用ISA COM组件,大略统计采集一次数据将调用COM组件函数50次左右。
(2)用eVC编写采集AD的应用代码,然后将该代码统一打包成一个COM组件,在C#的应用程序直接调用该COM组件函数使用,也就是说,进行一次数据采集只调用一次COM组件函数。
如上两种模式,实现的目的和功能完全一致,我们将数据采集的次数延长,比如采集几千次AD数据,然后统计所花费的时间,发现方式(1)所耗费的时间数倍于采用方式(2),我们得到一个简单结论,C#调用COM组件的效率较低,反复调用COM组件大量地消耗了系统资源和时间。为此,我们进行了简单的计算。为了计算的参照性,我们引用了eVC同样的应用程序执行数据采集所花费的时间作为参考时间。那么,可以这样认为:
程序运行总时间 = 花费在实际数据采集的时间+COM组件消耗的时间+其它系统小开销
其中,“其它系统小开销”在数据采集次数足够多的情况下,可以忽略不计,“花费在实际数据采集上的时间”采用eVC应用程序所得到的数据,那么,我们可以对方式(1)和(2)进行一个简单计算,实际结果是:方式(1)和方式(2)得到的调用一次COM组件应用函数所耗费的时间均是17us,结果惊人的一致。
实验硬件环境 |
英创EM9161工控主板+ETA102数采模块 CPU:32位ARM9(ARM926EJ-S内核),主频:200MHz |
软件 |
VS2005 C# |
一次COM组件调用时间 |
17us |
根据上述实验,我们可以得到在.NET Framework环境C#应用程序开发中COM组件的调用效率原则:即COM组件功能本身的执行时间应大于17us,才可能保证C#应用程序具有较高的执行效率。例如在方式(1)中,每次ISA总线执行的时间只有0.5us,因此若在C#程序中通过反复进行ISA总线的COM组件调用,则实际代码效率就肯定很低;而在方式(2)中,采用专门的AD采集COM组件,可实现一次采集多个样点,每个样点的采集时间为45us,因此,若C#在调用该COM组件时,采用一次采集10个样点的策略,则可获得很高的代码效率。总之,为了保证使用C#等“高级”语言(其他的类似语言有.NET VB、LabView等)进行应用开发的时候具有合理的代码执行效率,对需反复大量调用COM组件函数应仔细了解COM组件函数的实际执行时间,对执行时间小于17us的函数,需特别谨慎,否则将耗费大量系统资源。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表德赢Vwin官网 网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
相关推荐
上市) 该项服务具体说明和实施流程参见:支持客户进行Linux移植 需要该服务的客户需与
英
创签订
技术保密协议,并承诺严格履行协议:
英
创主
发表于01-18 13:52
C#教程之
调用Outlook发送邮件,很好的
C#资料,快来学习吧。
发表于04-20 15:27
•
4次下载
COM(Component Object Model),即
组件对象模型,是微软公司开发的一种新的软件开发
技术,Microsoft的许多
技术,如ActiveX、DirectX、以及OL
发表于11-04 09:48
•
1223次阅读
英
创公司的ARM9工控主板产品均预装了Windows CE5.0操作系统,支持包括EVC、
C#、VB、LabView等多种开发工具。
发表于11-05 10:07
•
1654次阅读
英
创ARM9工控主板的数据采集功能通常采用板上的GPIO实现数字输入输出、通过精简ISA总线扩展相应的外部控制电路(如控制继电器或AD或DA实现模拟数据的输入输出等)。
发表于11-12 10:24
•
1475次阅读
英
创ARM9工控主板的一个很大的特色就是提供了标准的CAN总线通讯接口,客户可以方便地在工业现场、汽车、船舶等等领域进行CAN通信应用。由于
英
创ARM9嵌入式主板采用WinCE操作系
发表于11-12 10:34
•
2266次阅读
通讯的时候,往往是需要对RTS进行设置的。为了解决这个问题,
英
创公司现在提供了操作串口的
COM
组件接口;用户只需要在目标平台上进行
组件注册,
发表于11-14 09:37
•
2104次阅读
英
创嵌入式ARM9主板采用微软的Windows CE操作系统,可以采用eVC或者VS2005进行应用开发。
C#作为一种简单易用的编程语言工具,由于其在结构构建和API界面上的优势,受到广大客户的喜爱,并为很多用户所选用。为了让广
发表于11-15 10:01
•
1978次阅读
的高精度、全天候、全球覆盖、方便灵活和优质价廉所吸引。在嵌入式产品的开发应用中,很多领域都涉及到GPS导航和定位的应用;
英
创的很多用户,就是在
英
创的嵌入式主板的基础上,外接GPS应用模
发表于01-14 11:33
•
2600次阅读
许多用户在程序开发过程中需要使用
C#启动一个外部程序(进程),在使用完毕该外部程序后,又希望能将其关闭。我们特在此对
C#启动和关闭外部进程的方法进行一个简单的介绍。
C#启动外部程序(进程)有两种
发表于01-14 14:36
•
1127次阅读
的驱动程序,用户只需直接
调用相应的接口函数即可实现。 在使用
C#进行应用程序开发时,由于
C#无法使用
C++的静态库函数,对于一些流式驱动设备,比如ISA,GPIO,WDT,CAN,SP
发表于01-15 11:29
•
1209次阅读
在使用
英
创ARM9系列嵌入式主板的
COM口,CAN口,网口时,一般会使用到timer或线程来实现数据的接收。使用timer控件较为方便,通过InterVal值来设定
调用间隔,但是灵活性
发表于01-15 11:25
•
1202次阅读
英
创EM335x工控主板,使用的Cortex-A8及WEC7操作系统。本文以EM335x工控主板光盘例程为例,简单介绍一下
C和
C#代码如何
调用
发表于01-17 10:01
•
2562次阅读
资源,
英
创提供了Java硬件支持包,主要支持的工控接口有:以太网、串口、CAN、GPIO、SPI、I2
C、RTC等。本文主要介绍使用Java语言
调用
发表于02-06 11:09
•
1730次阅读
资源,
英
创提供了Java硬件支持包,主要支持的工控接口有:以太网、串口、CAN、GPIO、SPI、I2
C、RTC等。本文主要介绍使用Java语言
调用
发表于02-06 11:06
•
1529次阅读
评论