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

  • ????本文作者:由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天不停更,目标很远大,加油!

例行小结,理性看待!

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

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

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

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

EF Core 异步编程注意要点相关推荐

  1. .Net Core重难点——异步编程

    目录 一.什么是异步编程 二.await和async 三.异步方法不等于多线程 四.IAsyncResult接口 五.四种异步编程方法 一.什么是异步编程 这些年.Net增加了很多新特性,其中一个特性 ...

  2. 用ASP.NET Core MVC 和 EF Core 构建Web应用 (一)

    系统必备 .NET Core 2.0.0 SDK 或更高版本. 已安装 ASP.NET 和 Web 开发工作负载的 Visual Studio 2017 15.3 版或更高版本. 创建Web应用程序 ...

  3. 杨中科.NET5视频教程更新了:DI、配置系统、Logging、EF Core等

    我的.NET5视频教程又更新了一些内容了,包含依赖注入.配置系统.日志系统以及部分Entity Framework Core的内容.Entity Framework Core还没全讲完,会继续更新. ...

  4. C#并发编程之异步编程(一)

    写在前面 C#5.0中,对异步编程进行了一次革命性的重构,引入了async和await这两个关键字,使得开发人员在不需要深刻了解异步编程的底层原理,就可以写出十分优美而又代码量极少的代码.如果使用得当 ...

  5. 了解和使用DotNetCore和Blazor中的异步编程

    目录 介绍 您对异步编程了解什么? 那么,什么是异步编程? 我们什么时候应该使用它? 任务.线程.计划.上下文 到底是怎么回事? Asnyc编码模式 命名约定 异步任务模式 任务模式 事件模式 阻塞与 ...

  6. efcore 实体配置_.NET 云原生架构师训练营(模块二 基础巩固 EF Core 基础与配置)--学习笔记...

    2.4.3 EF Core -- 基础与配置连接字符串 异步编程 日志 DbContext池 类和配置表 属性和列配置 并发token 索引 连接字符串 在 http://ASP.NET Core 配 ...

  7. C#异步编程基础入门总结

    给.neter们整理了一份<.NET/C#面试手册>,目前大约4万字左右,初衷也很简单,就是希望在面试的时候能够帮助到大家,减轻大家的负担和节省时间.对于没有跳槽打算的也可以复习一下相关知 ...

  8. @async 默认线程池_.NET Web应用中为什么要使用async/await异步编程?

    布莱恩特:.NET Core开发精选文章目录,持续更新,欢迎投稿!​zhuanlan.zhihu.com 前言 1.什么是async/await? await和async是.NET Framework ...

  9. 深入理解javascript异步编程障眼法h5 web worker实现多线程

    0.从一道题说起 var t = true; setTimeout(function(){ t = false; }, 1000); while(t){ } alert('end'); 1 2 3 4 ...

最新文章

  1. cve-2017–10271 XMLDecoder 反序列化漏洞 原理分析
  2. 信息系统项目管理知识--物联网
  3. error: '__gnu_cxx::_Lock_policy' has not been declared
  4. DevExpress第三方控件汉化的全部代码和使用方法
  5. SAP UI5 BindingParser
  6. JBoss BRMS与JasperReports进行报告
  7. 快速了解AngularJs HTTP响应拦截器
  8. 自定义的全局公共样式
  9. 人工智能可控核聚变量子计算机,中国终于实现了可控核聚变
  10. Java读书笔记(8)-单例模式
  11. 比特大陆裁员 85%,区块链行业彻底入深冬
  12. shell读取用户输入
  13. MKAnnotationView,MKAnnotation与MKMapView结合使用显示坐标点
  14. 怎么选最快dns服务器,dns设置(dns设置哪个最好最快)
  15. 【第一组】第十一次例会纪要
  16. 国内拉取 gcr.io 镜像(Google Kubernetes 镜像)
  17. 会话技巧---英文单词
  18. 计算机基础知识第一章测试题,计算机基础知识测试题第一章
  19. java打印 好看的图形_分享java打印简单图形的实现代码
  20. 2021CCF BDCI图书推荐系统竞赛baseline

热门文章

  1. Linux Command Line 解析
  2. 1.5.2 在IIS上配置ASP.NET(转)
  3. CCNA,CCNP资料
  4. 修改PATH导致fedora无法登录XWindow
  5. Oracle对表名大小写敏感吗,让Oracle 大小写敏感 表名 字段名 对像名
  6. error while loading shared libraries: libmysqlclient.so.16: cannot open
  7. mac下npm/node的安装和卸载、升级;node、npm升级后最后删掉node_modules重新安装
  8. html 基础之canvas 和 localStorage
  9. JQUERY插件学习之jQuery UI
  10. Stay Hungry Stay Foolish——网络学习平台分享