英创信息技术C#调用COM组件的效率分析概述

.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的函数,需特别谨慎,否则将耗费大量系统资源。

MODBUS转PROFINET网关来连接台达VFD-E变频器与PLC的配置案例
iPhone8什么时候上市?iPhone8发布时间曝光:iPhone8此次备货充足,向三星至少下7000万块面板
基于ARM Cortex M0+内核的STM32 L0系列入门介绍
什么是大数据?大数据技术有哪些?
【线上|12月13日&15日】任意波形发生器系列研讨会
英创信息技术C#调用COM组件的效率分析概述
FSD零干预的成功许是因为“好运气”?中国的自动驾驶路在何方?
深度解析MegEngine 4 bits量化开源实现
在5G大连接下,燃气行业将成物联网和终端智能化的标杆性行业
神大公司与中联重科签订动臂塔机购买协议
WT588F02KD-24SS实现LED驱动+语音播报功能
2010年土耳其国际暖通卫浴.空调及通风设备展 王薇 1
曝苹果新款MacBook Pro16首发AMD 6700M显卡
柔性制造专家低压电器LN极电工插座解决方案
怎样用HT12E和HT12D制作射频发射器和接收器
金士顿推出Canvas Select Plus系列microSD存储卡,进一步提升用户的体验
如何衡量一款气体报警器的好坏
管道风速传感器功能特点有哪些?
ADC——电压采集
广东联通近期升级了 B 端的服务体验