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,一经查实,立即删除!

相关文章

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

全世界只有3.14 % 的人关注了青少年数学之旅(图源网络,侵权删)

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

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

SQL2005的配置

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

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

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

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

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

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

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

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

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

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

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

Scribefire发CSDN博客

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

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

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

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

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

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

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

protobuf在java应用中通过反射动态创建对象

2019独角兽企业重金招聘Python工程师标准>>> ---恢复内容开始--- 最近编写一个游戏用到protobuf数据格式进行前后台传输,苦于protobuf接受客户端的数据时是需要数据类型的如xxx.parseForm(...),这样就要求服务器在接受客户端请求时必须知道客户端传递的数…

黑科技轮胎:有能发电的,脑洞简直不要太大...

全世界只有3.14 % 的人关注了青少年数学之旅人类历史上的很多伟大发明,都是由脑洞产生的,这样那样,然后问题就解决了,过程很复杂,却又很简单,甚至有时候,是一种很奇葩的方式。在漫长的历史进程中…

VS 2019 16.11正式发布 | 新功能(Hot Reload 热重载)试用

VS 2019 16.11VS 2019 16.11已于2021.8.10正式发布。(https://devblogs.microsoft.com/visualstudio/visual-studio-16-11/)这个版本主要包括以下内容:Visual Studio中的Git工具体验改进支持.NET应用程序的Hot Reload(热重载&…

测试String, StringBuilder,StringBuffer 的数据,我居然发现这些了~~

懒的搞什么开头了,直接撸代码吧 想了想还是给大家看看学姐照片吧,保持眼睛的明亮,代码敲多了,伤眼 1: 作StringBuilder与String的拼接比较 Test public void testString () {String s"";long begin S…

厉害了!这里藏着通关学霸的秘籍

全世界只有3.14 % 的人关注了青少年数学之旅在这个资讯丰富且易获取的时代,越来越多的人不愿意花时间阅读书籍,碎片化阅读成了主流。人们获取的东西多而杂,很难系统、全面。海量信息对人是冲击,更是诱惑。谁不想了解天下奇闻&…

『 编程思维』之我见

编程思维,对于一个开发人员来说是必备的,但凡能让应用跑起来,不管应用的大小,优劣,说明这个开发人员都具有编程思维,毕竟程序认可了这个开发人员逻辑,能启动起来。小到几行代码,一个…

史上最全图详解Jvm—诊断工具和JVM监控

3.1. 工具概述 使用上一章命令行工具或组合能帮您获取目标Java应用性能相关的基础信息,但它们存在下列局限: 1.无法获取方法级别的分析数据,如方法间的调用关系、各方法的调用次数和调用时间等(这对定位应用性能瓶颈至…

去医院看病如何开开心心出来? | 今日最佳

全世界只有3.14 % 的人关注了青少年数学之旅(图源百度弱智吧,侵权删)