场景是这样的,有个逻辑对象的结构如下:

struct Msg
{
  int type;
  char name[12];
  float height;
  float width;
  int count;
  int flag;

}

C++和C#分别来做这个对象的传输。

传输方面没什么好说的,是操作系统IO的事情,和语言无关。

下面是收到数据之后进行parse,为了对比,我们把数据parse一百万次。

C++从socket收到char* input_raw_buf之后,只要:
Msg* msg;
memcpy(msg, input_raw_buf, sizeof(Msg));

一百万次耗时20毫秒。

C#从socket收到byte[] input_raw_buf之后,需要做:

Convert.ToInt32()

Convert.ToString()

这种方式被批太落后,直接就没测试。

C#优化,改用Marshal:

一百万次耗时1781毫秒。比C++慢80多倍。据说和上面被批最原始的方式性能相当。有谣言说Marshal只是语法糖。

C#再优化,改用BinaryReader:

BinaryReader reader;

msg.type = reader.ReadInt32();

还不够快。

再优化,改用伪指针的方式:

fixed (byte* p = data)

msg.type = *(int*)p;

msg.name = new string((sbyte*)p, 4, 12)

一百万次耗时484毫秒。比C++慢20多倍。

无法可想,没法再优化了。

最终的结果是,在parse二进制格式的数据的时候,C#比C++最少要慢20多倍。

(建议各位,不要采用unsafe的方式构建C#程序)

当然,我们也不会整天去parse二进制数据,因此C#众不用太担心。

我也用C#写过不少程序,性能也都马马虎虎能接受。

不过,一定要注意,C#在某些特定的环境下,有可能会慢得出乎你的意料。

(Java众先不要高兴,Java必定有同样的问题,因为Java和C#的基础架构是一样的)

转载于:https://www.cnblogs.com/hehe520/archive/2009/11/05/6330426.html

C++和C#的性能比较相关推荐

  1. kali2020进入单模式_蚂蚁集团技术专家山丘:性能优化的常见模式及趋势

    陈显铭(山丘) 读完需要 6分钟 速读仅需 2 分钟 陈显铭,花名山丘,就职于蚂蚁集团,对分布式应用架构.服务化.性能优化等有深入的理解.参与支付宝支付链路核心系统,设计.调优应用系统关键能力, 高效 ...

  2. Go 学习笔记(81)— Go 性能分析工具 pprof

    Go 语言工具链中的 go pprof 可以帮助开发者快速分析及定位各种性能问题,如 CPU消耗 .内存分配及阻塞分析 .具体作用如下: 性能分析首先需要使用 runtime.pprof 包嵌入到待分 ...

  3. pyspark性能调优参数

    20220311 参数调节 把executor数量调小,其他参数值调大,不容易报错 一.指定spark executor 数量的公式 executor 数量 = spark.cores.max/spa ...

  4. 矩阵乘法的性能提升 AutoKernel

    随着AI技术的快速发展,深度学习在各个领域得到了广泛应用.深度学习模型能否成功在终端落地应用,满足产品需求,一个关键的指标就是神经网络模型的推理性能.于是,一大波算法工程师为了算法的部署转岗算子优化工 ...

  5. TensorFlow与PyTorch模型部署性能比较

    TensorFlow与PyTorch模型部署性能比较 前言 2022了,选 PyTorch 还是 TensorFlow?之前有一种说法:TensorFlow 适合业界,PyTorch 适合学界.这种说 ...

  6. App性能分析数据监控

    App性能分析数据监控 APP的性能监控包括: CPU 占用率.内存使用情况.网络状况监控.启动时闪退.卡顿.FPS.使用时崩溃.耗电量监控.流量监控等等. 文中所有代码都已同步到github中,有兴 ...

  7. Yolo v4, v3 and v2 性能极简图示

    Yolo v4, v3 and v2 性能图示 https://github.com/AlexeyAB/darknet 参考链接: https://github.com/AlexeyAB/darkne ...

  8. Arm Cortex-M4 MCU性能

    Arm Cortex-M4 MCU性能 基于ARM Cortex-M和RISC-V内核,提供了丰富的产品组合和全面的软硬件支持. Arm Cortex-M4 MCU 基于Arm® Cortex®-M4 ...

  9. Arm Cortex-M3 MCU性能

    Arm Cortex-M3 MCU性能 基于ARM Cortex-M和RISC-V内核,研发出来了产品组合和全面的软硬件支持. Arm Cortex-M3 MCU 基于Arm® Cortex®-M3内 ...

  10. TVM性能评估分析(七)

    TVM性能评估分析(七) Figure 1. Performance Improvement Figure 2. Depthwise convolution Figure 3. Data Fusion ...

最新文章

  1. Java单元测试之JUnit4详解
  2. hibernate加载持久化对象的两种方式---------------load方式和get方式
  3. 如何计算MP3总时长的问题(二)
  4. 领扣 LeetCode 42:接雨水(java)(网易有道面试真题)
  5. 电商分类模块写法_模块化写作——网络小说创作之典藏秘籍
  6. python表示矩阵
  7. JDeveloper中的Java反编译器
  8. CodeForces - 500A-New Year Transportation(模拟)
  9. Java字符串分割(split)
  10. polycom安卓手机客户端_Spark,安卓上最好用的邮件客户端来了!附App下载
  11. 剑指OFFER之包含min函数的栈(九度OJ1522)
  12. [渝粤教育] 西南科技大学 微机原理与应用 在线考试复习资料(2)
  13. 隐匿函数,二分法 冒泡排序
  14. CDH集群更换IP处理方法
  15. 网络游戏外挂编写基础一
  16. 不可不知的CPU风扇清理技巧
  17. 产业安全专家谈丨数字经济高速发展,数据要素安全该如何保障?
  18. 自己整理的scratch说课讲义
  19. 把backtrader改造成金融强化学习回测引擎
  20. .NET操作Excel高效低内存的开源框架 - MiniExcel

热门文章

  1. ELK 架构之 Elasticsearch 和 Kibana 安装配置
  2. C# 连接sql 2005
  3. 用Unity简单实现第三人称人物的移动和转向
  4. 第二阶段:4.商业需求文档MRD:5.PRD-原型图
  5. es5创建对象与继承
  6. 怎么用xmind整理我们获取的杂乱的信息
  7. JavaScript--如何插入JS
  8. Vue-cli使用prerender-spa-plugin插件预渲染和配置cdn
  9. NVM node版本管理工具的安装和使用
  10. SnackbarUtils:一行代码搞定Snackbar