SNMP_PP和SNMPSharpNet的性能比较

来源:互联网 发布:union软件怎么用 编辑:程序博客网 时间:2024/05/17 03:50

    先介绍下背景:

    大约3年以前开始使用SNMP++,去年由于上层是C#、C++调试麻烦等问题,转向其他snmp库,比对了SNMP++,NetSnmp和SnmpSharpNet,最终因为SnmpSharpNet用起来的方便就选了它,随后逐渐完善了自己负责的软件的相应数据访问层。

    去年另一个项目的软件仍使用snmp++的库,并且重编译过(可能进行了某些改动),该软件的目标之一是替代我现在使用的软件!天哪,我不允许替代我的软件的代码性能低于我,所以做了下效率的测试。

    测试数据在公司...很遗憾这里列不出来了...

    测试环境:

          PC网卡直连设备(这个设备是我们自己的产品,嵌入式SNMP部分使用Agent++)

          使用Wildpackets Etherpeek直接抓包测试。

          使用C++编写测试程序,调用snmp_pp.dll,Get设备object id 10次。

          使用C#编写测试程序,调用snmpsharpnet.dll,Get设备object id 10次。

           测试程序均为release编译。       

    测试结果:

          C++情况下第一个完整GET操作好事0.047s,C#为0.0468

          随后的时间均短一些,但C#的timetick居然在多次循环中存在数值为0!即第一个GET0.0468,第二个0,第三个0,第四个非0的数值...不明白为什么,所以采用抓包工具进行更客观的测试。

          结果显示,C#情况下第一个Get的Request包和最后一个Response包的时间间隔约为0.3s,C++情况下在1.4-1.5s之间。

          注意到当时C++情况下命令行有打印一些其他信息,故在snmp_pp源码中删除打印信息的语句,重新测试,时间在1.3s左右。

          测试GetNext操作,数据和Get基本相同。

          (我注意了下数据包中的源端口,C++和C#都是每包+1,也就是自动以下一个可用端口作为源端口)

 

    据说CLR在数据库、Socket、文件处理方面比C++强,这个我没测试过,不过现在在SNMP的基本库来看,还是SNMPSharpNet高一筹。

     所以...我还是用SnmpSharpNet吧

         

原创粉丝点击