C#和C++性能差距巨大,在高耗能和低性能设备上强烈建议不要使用

首先给大家一个声明:

C#和C++性能差距巨大,在高耗能和低性能设备上强烈建议不要使用

首先我使用的设备环境说下

PC端

      I5 CPU

      4G 内存

WinMoblie

      806Mhz  CPU

      256 内存

这里我将给出原因:

项目 是WINBOLIE 和PC 在线视频医疗的,这里的最复杂的部分无非是WINMOBLIE对PC 和PC对WINMOBLIE的视频音频会话。

项目的开始根据客户要求采用纯C# 编写,先实现了PC端到PC端的语音和视频,顺便做了一个文字聊天,还做了一个视频服务器,能上线下线并支持视频音频转发。

采用了如下技术:

      1).采用了业界比较通用的XMPP协议

      2).视频用DirectShow.NET做底层,采用H263编码

      3).音频用了 LumiSoft.Media.Wave模块,用G711压缩 speex 回音消除

      4).网络部分用了UDP的NAT穿透

      由于我之前在PC上用C++做过类似的案例,所以做起来比较顺手,10来天就搞定了,运行效果良好,总体比较满意

但是没想到接着就是我的噩梦到来。

接着开始把PC上的程序移植到WINMOBLIE上,首先WINMOBLIE上的.NET框架是.NETCF 和原生.NET框架有一定差距。

接着开始移植

    1).DirectShow.NET 是不能直接用了,做了一些修改,花了一点时间基本能用了,但是程序逻辑基本没变

    2).LumiSoft.Media.Wave的音频模块移植非常简单 原本调用的 winmm.dll改成winmoblie上的SDK的DLL就可以了。

    3).XMPP基本顺利移植

    4).网络通信基本没多少改动

到这里可以看出来我程序基本上没多少改动就移植到了WINMOBLIE上,看是很好,可是很悲催的问题出现了

 程序性能特别低下!是特别!!!特别的特别!!!卡到基本不能使用!!

后面我被迫把模块一个个单独拉出来去测试然后发现

    1).DirectShow.NET 使用的时候CPU 100%(视频)

    2).LumiSoft.Media.Wave 使用的时候 CPU 100% (音频)

 这是单独使用啊!!!单独使用,是不是很坑爹!!!!!

 绝对不是我编程的问题,绝对,我之后可以发一些测试代码上来供大家测试(如果大家兴趣)

接着就是无限制的优化+优化!!!!!而且正对WINMOBLE进行优化!

整整一个星期时间过去,没搞出成果。还是很卡。

接着我开始考虑用C++代替C#的方案,然后用C#调用C++写的视频和音频的DLL

这里是重点:

      1).DirectShow.NET  基本采用逻辑不便规则移植到C++上,绝对没有什么逻辑性改进!(也就是按照C#的代码去写C++程序)

      2).LumiSoft.Media.Wave 采用基本逻辑不变规则移植到C++上,绝对么有什么逻辑性质改进和优化!

发现C++版重写的的:

     1).DirectShow  视频部分 CPU 40%

     2).音频部分 CPU 10%

也就是大大满足了要求,性能非常好,任何逻辑改动都没,任何优化都没做!C++立刻完美实现!

最后得到的结论就是

C#和C++性能差距巨大,在高耗能和低性能设备上强烈建议不要使用

如果大家有兴趣我可以发详细对比测试!欢迎大家讨论!

原文地址:https://www.cnblogs.com/liyiko/p/2500845.html