.net 前世今生2——C#开发者的春天

    去年.net5出来后,我在.net前世今生里问了一个问题,就是能不能用C#做全栈开发,带着这个问题去观察和理解.net,得到了完全肯定的答案,以后用C#就可以一张蓝图绘到底了。

1. 性能提升

    .Net Core3.1   .Net 5   .Net 6(2021年11月)每个版本都非常重视性能优化。众所周知,C#是托管语言,相比于C和C++,托管代码与内存之间有一个垃圾回收机制,这降低了内存访问速度(换来了安全性)。为提高内存访问速度,C#引入了Span<T>这个接近指针的新类型,可以自由的对数组进行切片而不用复制,引入了ArrayPool减少内存的分配,正确使用这些(System.Buffers, System.Memory)新类型,你将获得媲美指针的内存访问速度,许多.Net底层库都提供了以Span类型为(唯一)参数的API。

    另一方面,多线程模型对于服务器开发非常重要,但线程粒度大(一个线程需要1M内存),线程的调度(切换上下文)也需要耗费CPU时间片,相比较,go语言的goroutine就轻量得多,go在服务端吞吐性能上也遥遥领先。.Net 的应对是推TAP,用Task+异步来实现高性能的并发,追平了与go的性能差距。

    在服务器编程、游戏编程领域,今天的C#性能已经没有瓶颈了,微软自己的许多库C代码也在用C#重写,以避免维护(C/C++ 和 C#)两套代码。

2. 走向台前

    如果说服务器开发是幕后,那么前端(网页、APP、桌面应用)的开发就是台前了。这块一直是javascipt/typescript的天下,比较流行的框架有React, Angular, Vue, ASP.NET Core Razor 属于服务器端渲染,只是用了web socket提高通讯效率。

    自从有了 Blazor webassembly,情况发生了变化。web assembly让浏览器可以运行任何语言的代码而不仅仅是javascript,这就让C#有了走向前端的机会,Blazor正是C#取代javascript做富交互的。Blazor webassembly完全在浏览器中执行,许多.Net库都可以应用,也可以跟js互操作,已经有像Ant Design Blazor这样的前端库了,DevExpress Syncfusion这些老牌商用你 .Net 库也都跟进了。

3. gRPC

    以往,我们用C#写服务器端往往要写3遍实体,首先是应用层实体A,然后是网站后台的实体B,最后是前端js里的实体C,他们差别不大,主要是序列化方式不同:A-B之间一般是WCF或.net remoting,B-C之间一般是Web API,这无形中增加了代码量。nodejs之所以走向服务端,也是为了少一次实体定义。那么,前端和服务器之间能不能只用一套实体?gRPC+Blazor webassembly 似乎可行。

    .Net Core3.0开始,微软把gRPC作为首选,看重的是其语言无关、高性能等优势,在.Net 5里gRPC开发已经相当方便,主要工作就是写proto文件了。前端和服务器用gRPC通讯后,二进制的protobuf比json小一半,(有链接)http/2也比http协议效率高,真可谓事半功倍。

4. Visual Studio

    最近vs2019在一个月内更新了4次,宇宙无敌ide加上C#各种语法糖,C#开发效率无疑要高出其他语言一大块。市面上,C#码农价码不如java,其中一个原因就是java10个人干的活C#只要3个人,导致C#的人员需求量小。

总结

    结合.Net 发展战略和.Net5现状,我相信C#开发者的春天来了,C#作为一种前后端通吃的语言,在兵器谱的排行榜上地位将快速上升,预祝唐家霸王枪重夺兵器谱第一名! 2021年4月8日。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值