最近广州.NET微软技术俱乐部对如何编写高性能.NET程序发起了讨论。
 
首先是在ORM和SQL方面进行了讨论,主题当然是经久不衰的月经贴: EF性能很差.
Edi.Wang专门写了一篇文章<Entity Framework 的一些性能建议> 说明了只要正确使用EF, 性能并不差.
我自己用EF十年了, 也没有感觉到EF性能差. 我的解决方法是把EF最常见性能瓶颈,比如审计日志进行优化. 之前是异步记录日志, 最近的做法是术业有专攻, 记录日志就扔给最擅长做日志的ELK组合去做. 同时ABP的审计日志也是用EF的,在大型项目里面性能也不差,详情可以看我的另一篇文章:《ABP大型项目实战(2) - 调试与排错 - 日志 - 查看审计日志》。这可是既有大量数据又有多表关联查询哦。
 
可见, .NET性能并不差, 而且随着.NET的不断进步, 优化门槛越来越低, 只要你找到获取这类知识的渠道,花点时间, 很快就可以编写出高性能的.NET程序.
 
然后又说到FP(函数式编程).
FP(函数式编程)是一种和OOP(面向对象编程)不一样的编程方式.
对于OOP(面向对象编程), 绝大多数人都知道.
然而对于FP(函数式编程), .NET俱乐部里的绝大多数人并没有感觉, 因为感觉日常没有用到啊, 而且FP类编程语言Erlang和Go距离我们.NET程序员太远了.
其实.NET俱乐部里的绝大多数人都用过FP, 只要用过前端三大框架(Angular/React/Vue)的朋友们都用过FP了. 比如如下代码:

this.XXXService.getPagedXXXList(
this.filterText,
request.sorting,
1000, // request.maxResultCount,
0// request.skipCount,
)
.finally(() => {
finishedCallback();
})
.subscribe(result => { //这里用到了FP(函数式编程)
this.dataList = result.items;
this.totalItems = result.totalCount;
this.showPaging(result);
this.loading = true; });

  

哈哈, 看到这段代码是否恍然大悟, 原来我天天都在用FP啊!
那么FP是什么时候很低调的活在我们日常代码中呢? 为啥他兄弟OOP如此高调,他却如此低调?
OOP在行业里风风火火几十年,但是到了2005年,摩尔定律在单核CPU性能上达到了物理极限!单核时代到了尽头,多核时代开始了!《Concurrency in .NET》一书的第一章对此有详细描述。
OOP在几十年前提出的时候并没有考虑到多核这种情况。OOP在多核时代暴露了很多缺陷!
当然OOP在多核时代依旧能工作,很多朋友们现在依然在用OOP写程序,但是本文的主题是《编写高性能.NET程序》!!!要想编写高性能.NET程序,就必须要尽量利用多核CPU性能。OOP在这方面具有很多缺陷。
 
而FP的众多特性,比如不可变性,十分适合多核CPU时代,于是FP开始崛起了。随着时间的推移,FP的库开始多起来了,比如.NET里就有Rx.NET这个著名的FP库。
FP不知不觉发展了10年,来到了2015年,随着前端三大框架(Angular/React/Vue)推出,前端开始爆发,FP终于被绝大多数程序员不知不觉的使用了。
 
所以,如果你不满足于仅仅是API调用者,你要编写高性能.NET程序,你要榨干多核CPU的性能,那你必然要开始了解FP了。
 
除了FP之外,《Concurrency in .NET》一书还提供了很多种方法去榨干多核CPU的性能,比如TPL/Dataflow。我会继续写这一系列,在后面的笔记里,你会接触到很多你在日常代码中每天都看到的技术名词,比如async, await关键字, task等类型,但是你可能熟视无睹了。希望你看了这本书或者我这系列笔记之后,不要再说.NET性能差了。
 
什么?《Concurrency in .NET》目前只有英文版?不要着急,据可靠渠道的可靠消息,很快就会有中文版的啦!等中文版出来后,我会通知大家的。
 
Q&A:
  1. 为了利用多核CPU性能和使用FP,我要放弃C#去学习一门新的语言吗?
    答:不需要,随着C#的不断进步,C#添加了很多关键字和类型去利用多核CPU性能,比如async, await, task,C#也有了FP库,比如Rx.NET,所以你不需要放弃C#,你继续使用C#就可以了。
  2. 这本书和这系列笔记和.NET本质论等赵三本有啥区别?
    答:.NET本质论这类书出版的时候多核CPU时代还没到来,所以这类书籍并没有对.NET如何利用多核CPU进行描述,而这本书和我这系列笔记则是专门针对多核CPU的。

编写高性能.NET程序-《Concurrency in .NET》(1)- 为什么要读这本书?的更多相关文章

  1. 编写高性能Web应用程序的10个技巧

    这篇文章讨论了: ·一般ASP.NET性能的秘密 ·能提高ASP.NET表现的有用的技巧和窍门 ·在ASP.NET中使用数据库的建议 ·ASP.NET中的缓存和后台处理 使用ASP.NET编写一个We ...

  2. 编写高性能 Web 应用程序的 10 个技巧

    使用 ASP.NET 编写 Web 应用程序的简单程度令人不敢相信.正因为如此简单,所以很多开发人员就不会花时间来设计其应用程序的结构,以获得更好的性能了.在本文中,我将讲述 10 个用于编写高性能 ...

  3. 转自微软内部资料:编写高性能 Web 应用程序的 10 个技巧

    编写高性能 Web 应用程序的 10 个技巧 转自微软资料数据层性能技巧 1 — 返回多个结果集技巧 2 — 分页的数据访问技巧 3 — 连接池技巧 4 — ASP.NET 缓存 API技巧 5 — ...

  4. 【JavaScript】【译】编写高性能JavaScript

    英文链接:Writing Fast, Memory-Efficient JavaScript 很多JavaScript引擎,如Google的V8引擎(被Chrome和Node所用),是专门为需要快速执 ...

  5. 编写高性能JavaScript【转】

    英文链接:Writing Fast, Memory-Efficient JavaScript 很多JavaScript引擎,如Google的V8引擎(被Chrome和Node所用),是专门为需要快速执 ...

  6. [转]编写高性能的Lua代码

    昨天晚上闲来无事,看室友在电脑上挂机玩游戏,用的一个辅助脚本,以为是lua写的脚本在跑,实际调查发现是按键精灵的脚本. 于是在网上找相关Lua开发游戏脚本的案例,看到一个人的博客,内容很不错,学到了很 ...

  7. 编写高性能的Lua代码

    编写高性能的Lua代码 Posted on2014/04/18· 10 Comments 前言 Lua是一门以其性能著称的脚本语言,被广泛应用在很多方面,尤其是游戏.像<魔兽世界>的插件, ...

  8. 编写高性能的 Lua 代码

    前言 Lua是一门以其性能著称的脚本语言,被广泛应用在很多方面,尤其是游戏.像<魔兽世界>的插件,手机游戏<大掌门><神曲><迷失之地>等都是用Lua来 ...

  9. .NET Core 3.1 编写混合 C++ 程序

    前言 随着 .NET Core 3.1 的第二个预览版本发布,微软正式将 C++/CLI 移植到 .NET Core 上,从此可以使用 C++ 编写 .NET Core 的程序了. 由于目前仅有 MS ...

随机推荐

  1. NeuChar 平台使用及开发教程(五):使用 NeuChar 的关键字回复服务

    在上一篇<NeuChar 平台使用及开发教程(四):使用 NeuChar 的素材服务>中,我们已经完成了素材的添加,下面,让我们来设置一个关键字回复,并同步到应设置好Neural Endi ...

  2. python爬虫学习视频资料免费送,用起来非常666

    当我们浏览网页的时候,经常会看到像下面这些好看的图片,你是否想把这些图片保存下载下来. 我们最常规的做法就是通过鼠标右键,选择另存为.但有些图片点击鼠标右键的时候并没有另存为选项,或者你可以通过截图工 ...

  3. [Swift]LeetCode220. 存在重复元素 III | Contains Duplicate III

    Given an array of integers, find out whether there are two distinct indices i and j in the array suc ...

  4. [Swift]LeetCode940. 不同的子序列 II | Distinct Subsequences II

    Given a string S, count the number of distinct, non-empty subsequences of S . Since the result may b ...

  5. ubuntu---网络管理

    网络配置文件 在 /etc/network/interface auto eth0 iface eth0 inet static address x.x.x.x netmask 255.255.255 ...

  6. 老司机教你用原生JDK 撸一个 MVC 框架!!!

    其实 Spring MVC 是一个基于请求驱动的 Web 框架,并且也使用了前端控制器模式来进行设计,再根据请求映射规则分发给相应的页面控制器进行处理,具体工作原理见下图. 在这里,就不详细谈相关的原 ...

  7. C/C++数据在内存中的存储方式

    目录 1 内存地址 2 内存空间   在学习C/C++编程语言时,免不了和内存打交道,在计算机中,我们存储有电影,文档,音乐等数据,这些数据在内存中是以什么形式存储的呢?下面做一下简单介绍. 本文是学 ...

  8. Java8 LocalDateTime获取时间戳(毫秒/秒)、LocalDateTime与String互转、Date与LocalDateTime互转

    本文目前提供:LocalDateTime获取时间戳(毫秒/秒).LocalDateTime与String互转.Date与LocalDateTime互转 文中都使用的时区都是东8区,也就是北京时间.这是 ...

  9. SpringMVC+JWT+Swagger UI+RestFul

    前言: 其实很早就想写这篇文章了,因为我觉得这会对很多新手有指引作用,当初自己也是瞎子过河的摸索着过来的.目前后台开发比较流行的MVC框架中使用Spring MVC还是比较多的,当然还有Spring ...

  10. SpringBoot+Elasticsearch

    1.  前言 1.1.  集成方式 Spring Boot中集成Elasticsearch有4种方式: REST Client Jest Spring Data Spring Data Elastic ...