EF Core 异步编程注意要点

  • ????欢迎点赞 :???? 收藏 ⭐留言 ???? 如有错误敬请指正,赐人玫瑰,手留余香!

  • ????本文作者:由webmote 原创,

  • ????作者格言:生活在于折腾,当你不折腾生活时,生活就开始折腾你,让我们一起加油!????????????

???? 序言

不得不说,异步和线程性能问题一直是高并发的大敌。

而.net core 自从诞生就不断地提升性能,目前的.net 6有一部分也是专门在优化性能方面的开销,而最近我阅读EF Core的 RoadMap时,也欣喜的发现这个由小团队维护的类库,也开始逐步为性能的提升做出改变。

EF Core团队特别是有一段话令人惊喜:他们将对标DapperLib库优化性能,并随.net 6一起发布。

???? 01.EF Core 不支持在同一上下文实例上运行多个并行操作

EF Core 不支持在同一上下文实例上运行多个并行操作。应始终等待操作完成,然后再开始下一个操作。这通常是通过在每个异步操作上使用 await 关键字完成的。

因此不要自作聪明 不使用await ,放任操作自己执行,寄希望于异步不影响主线程。

???? 02. 服务端与客户端异步 LINQ 运算符

为了支持异步执行 LINQ 查询,Microsoft.EntityFrameworkCore 命名空间中定义 EF Core 异步扩展方法。
EF Core 提供了一组异步扩展方法,这些方法执行查询并返回结果。这些对应于标准的同步 LINQ 运算符包括 ToListAsync、SingleAsync、AsAsyncEnumerable 等:

var blogs = await context.Blogs.Where(b => b.Rating > 3).ToListAsync();

服务端异步 LINQ 运算符只能在 EF 查询上使用,不能将其与客户端 LINQ to Objects 查询一起使用。若要在 EF 之外执行客户端异步 LINQ 操作,请使用 system.exception 包;此包对于在客户端上执行无法在服务器上进行求值的操作时特别有用。

遗憾的是,引用 system.exception 和服务端 LINQ 运算符上出现不明确的调用编译错误;这使得难以在同一项目中使用 EF 和 System.object。若要解决此问题,请将 AsQueryable 添加到 DbSet:

var groupedHighlyRatedBlogs = await context.Blogs.AsQueryable().Where(b => b.Rating > 3) // server-evaluated.AsAsyncEnumerable().GroupBy(b => b.Rating) // client-evaluated.ToListAsync();

???? 03. 并行异步数据库连接方法慢或阻塞

如果最小并发池子数没被设置,则会导致异步连接变慢,同步连接几乎不受影响,因此,默认构建sql连接字符串时,增加最小池子数参数。

  • 添加一个MinPoolSize为100的连接字符串。如果你加的数字大于100,你需要改变MaxPoolSize,因为其默认值为100,且不能小于MinPoolSize的值。

  • 对于池连接,请在你的连接字符串中添加Pooling=true,在你的非池连接中添加Pooling=false

???? 04. 异步读取大数据(二进制,文本,图片)非常慢

异步读取10MB的VARBINARY(MAX)值大约需要5秒,而同步读取相同的值大约需要20毫秒。将数据大小增加到20MB将使运行时间增加到大约52秒。

是的,这个问题,目前还没有解决,其涉及到 Zero Copy问题以及其他的一些线程协调问题,因此,估计Ef Core 6之前是不可能被解决的,因此最好的方案是 暂时使用同步方法。

???? 05.连接池到底设置多大?

严格来说,这不是EF的问题,数据库连接池是client方面的事情,不过也是困惑我很久的问题,这里给出答案。

参考值: 连接数 = ((核心数 * 2) + 有效磁盘数)

这一公式不仅适用于数据库连接池的计算,大部分涉及计算和I/O的程序,线程数的设置都可以参考这一公式。

因此微软默认的池子数是10-100。而由于对线程的管理不善,我们的应用一般会设置 100-1000左右,哈哈,这就是控制的差距。

我们经常见到一些小规模的web应用,应付着大约十来个的并发用户,却使用着一个100连接数的连接池。这会对你的数据库造成极其不必要的负担。

???? 06. 小结

晚上有事情,只能上班的时候抽空总结下。

养成一个好习惯,需要不停的激励和鼓励,写作的能力也许就是不断的写中提升的,当然还有自身的额能力,在不断的输出过程中,发现自己的不足以及巩固自己的知识。

30天不停更,目标很远大,加油!

例行小结,理性看待!

结的是啥啊,结的是我想你点赞而不可得的寂寞。????????????

????都看到这了,还在乎点个赞吗?

????都点赞了,还在乎一个收藏吗?

????都收藏了,还在乎一个评论吗?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AJAX+JavaScript无刷新检查用户名

AJAXJavaScript无刷新检查用户名是否可用2009-04-20 16:26 JavaScript 和 Ajax 代码<script language"javascript" type"text/javascript">var xmlHttp null; function createXMLHttp() { if(window.ActiveXObject) …

Cisco路由器密码恢复

Cisco路由器密码恢复1、必需先用终端方式接CONSOLE口&#xff0c;进入终端状态&#xff1b;2、开路由器电源&#xff1b;3、在60秒内&#xff0c;按Ctrl Break键&#xff0c;中断路由器的启动进程&#xff0c;使其进入ROM监控模式&#xff0c;提示符为"rommon >"或…

看电影的第一大禁忌 | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅&#xff08;图源网络&#xff0c;侵权删&#xff09;

C++经典面试题

1、int a5&#xff0c;则 (a)的值是&#xff08;&#xff09; A、5 B、 6 C、7 D、逻辑错误a返回的是一个暂时变量&#xff0c;这里是右值&#xff0c;不能再前面了2、以下的代码输出什么&#xff1f;&#xff08;取地址运算符比运算符的优先级要高&…

求职华为,被问观察者模式,从没有这种体验!!!

求职华为&#xff0c;被问观察者模式&#xff0c;从没有这种体验&#xff01;&#xff01;&#xff01;模式的定义与特点模式的结构与实现1. 模式的结构2. 模式的实现模式的应用实例模式的应用场景模式的扩展1. Observable类2. Observer 接口[ 观察者模式可以说是非常贴近我们…

SQL2005的配置

最近迷上c#&#xff0c;下午装好了SQL server management studio Express 附加经典的northwind数据库 然后用下面一段代码测试 1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Text;4usingSystem.Data;5usingSystem.Data.Sql;6usingSystem.Data.SqlClient;78name…

为什么应该用record来定义DTO(续)

前言上次&#xff0c;我们介绍了因为DTO的“不变性”&#xff0c;应该用record来定义DTO。今天&#xff0c;我们来说明用record来定义DTO的另一个好处。问题首先&#xff0c;我们实现一个Controler&#xff0c;代码如下:[ApiController] [Route("[controller]")] pub…

字节、编码、字符、字符集 专题

1.2 字符&#xff0c;字节&#xff0c;字符串 理解编码的关键&#xff0c;是要把字符的概念和字节的概念理解准确。这两个概念容易混淆&#xff0c;我们在此做一下区分&#xff1a; 概念描述举例字符人们使用的记号&#xff0c;抽象意义上的一个符号。1, 中, a, $, &#xffe5…

资料分享 | 数学建模竞赛备战大全

全世界只有3.14 % 的人关注了青少年数学之旅目前针对数学建模的认知&#xff0c;绝大部分人还停留在数学建模竞赛阶段&#xff0c;并不知道数学建模是数据领域非常重要的一种方法。数学建模涉及的内容广泛&#xff0c;比如碎纸片问题中所涉及的图像识别及神经网络、小区开放问题…

TC的文件拷贝/移动

在EX当中&#xff0c;我们比较常用的拷贝/移动文件/目录的方式就是先进行文件/目录定位&#xff0c;然后按CtrlC,Ctrlx&#xff0c;然后在移动到目标目录&#xff0c;再按Ctrlv&#xff0c;通过拷贝/剪切和粘贴的方式进行。文件在拷贝/过程当中只有一个对话框显示当前进度&…

初级Java开发工程师!绝密文档,面试手册全面突击!!!秋招已经到来

这里我要明说一下&#xff0c;不是Java初级和学习Java的千万不要乱看&#xff0c;否则~~~~ 你会怀疑人生&#xff0c;因为会浪费你时间啊&#xff01;&#xff01;&#xff01; 本次考点是Java初级开发工程师面试必备的一些东西!!! 1、数据类型 基本类型 byte/8、short/16、…

数学2600年,欧拉凭什么能当上“大王”?

全世界只有3.14 % 的人关注了青少年数学之旅何为数学&#xff1f;♠音乐家说&#xff0c;数学是世界上最和谐动听的音符♥植物学家说&#xff0c;世界上没有比数学更美的花朵♣美学家说&#xff0c;哪里有数学&#xff0c;哪里才有真正的美♦哲学家说&#xff0c;世界什么都在变…

NET流行高性能JSON框架-Json.NET

在日常编程中经常会使用到Json来进行数据的交互好在.Net平台下有很多开源的Json库使得我们能够比较轻松快速的处理各种复杂的Json&#xff0c;其中Newtonsoft库是NET的流行高性能JSON框架特性工具VS2010Newtonsoft库从NuGet下载合适的Newtonsoft.Json库1.在你需要引用Newtosoft…

Tcpdump 详解

TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤&#xff0c;并提供and、or、not等逻辑语句来帮助你去掉无用的信息。和Linux终端状态下的其他软件一样&#xff0c;TcpDump也是依靠参数来工作&#xff0c;本文将…

敢叫岁月不冬天

敢叫岁月不冬天题记&#xff1a;观看人民公园千菊会有感——代腾飞 2009年11月21日 于成都绿柳成荫似境仙秋菊满园锦上添红黄白紫竞展颜要留秋月不冬天转载于:https://www.cnblogs.com/daitengfei/archive/2009/11/22/1607976.html

Scribefire发CSDN博客

历史在非常久非常久曾经&#xff0c;CSDN是支持外部工具来写文章的&#xff0c;但是在还有一个非常久非常久曾经就不行了。突然看到CSDN有能够用外部工具来写博客了&#xff08;CSDN的公告&#xff09;&#xff0c;一直以来都纠结这个问题&#xff0c;CSDN的编辑器不好用&#…

今日笔记!——分析Java应用性能

1 问题描述 因产品架构的复杂性&#xff0c;可能会导致性能问题的因素有很多。根据部署架构&#xff0c;大致的可以分为应用端瓶颈、数据库端瓶颈、环境瓶颈三大类。可以根据瓶颈的不同部位&#xff0c;选择相应的跟踪工具进行跟踪分析。 应用层面瓶颈大致有如下两类&#xf…

除了PS,还有它可以轻松实现图像处理!

全世界只有3.14 % 的人关注了青少年数学之旅在我们生活中&#xff0c;常见的图像处理软件有Adobe Photoshop、Adobe Illustrator等。然而&#xff0c;并非只有软件才能实现图像处理&#xff0c;通过编程手段也是能实现的&#xff01;今天&#xff0c;小天将要带着大家走进计算机…

微服务并不能解决你的烂代码问题

点击上方蓝字关注我们“微服务并不能解决你的烂代码问题很久以来&#xff0c;软件的交付质量一直是一个大家比较关心的问题&#xff0c;而程序员和架构师也一直在极力寻找一种更好的方式来构建应用系统。随着互联网爆炸式的增长&#xff0c;对于系统的交付速度和质量的要求也日…

不要设计模式

看到首页讲设计模式的文章和书&#xff0c;有些感慨抒发一下。我买过一本设计模式的书&#xff0c;基本上看了&#xff12;&#xff14;个模式的名称&#xff0c;大致把这几个名字记住了&#xff0c;我并没有沉下心来深入理解&#xff0c;并不是书讲得不好&#xff0c;我是一个…