efcore性能调优

这篇具有很好参考价值的文章主要介绍了efcore性能调优。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

性能调优——EFCore调优

按下硬件、网络不提,我们单表从程序层面对系统的性能进行优化,翻来覆去无外乎三个方面

缓存
异步
sql
本片文章,我们针对.net core web项目的ef core框架进行性能优化。

1. EF Core框架已经本地缓存机制memorycache,所以我们访问一个接口,二次访问的性能相比首次会提升一大截

2.尽可能的通过主键查询

3.在进行字符串模糊查询时,分为三种情况

//StartsWith,相当于sql语句的like 'A%'
var result= ProductContext.Products.Where(p => p.ProductName.StartsWith("A")).ToList();

//EndsWith,相当于sql语句的like '%A'
var result= ProductContext.Products.Where(p => p.ProductName.EndsWith("A")).ToList();

//Contains,相当于sql语句的like '%A%'
var result= ProductContext.Products.Where(p => p.ProductName.Contains("A")).ToList();
其中的Contains()会导致索引失效,不建议使用

4.指定列查询。即字段查询、传输需要时间,字段越多,所需的时间就越多,所以我们可以指定我们所需的字段

ProductContext.Products.Select(p =>new { p.ProductId, p.ProductName})
对应的sql为:

select ProductId,ProductName
from Products
5.分页查询(常用于客户端查询)

int pageIndex = 1;
int pageSize = 10;

var result= ProductContext.Products
.Where(p => p.ProductName.StartsWith("A"))
.Take(pageSize) // 限制结果集数量。
.Skip((pageIndex - 1) * pageSize) // 数据的偏移量
.ToList();
6.一次性查询数据量较多时(如导出报表),借助缓冲区处理,即直接ToList()、ToArray()

ps:某些时候使用缓冲区而不是缓存,是因为缓冲区使用时会清空,而缓存不到过期时间不自动清空,某些场景下会浪费内存空间

//默认流式处理,遍历使用result时每次循环都会查询数据库
var result= ProductContext.Products.Where(p => p.ProductName.StartsWith("A"));

//缓冲区处理(一次性将数据查出,使用result时,直接从队列中取数据)
var result= ProductContext.Products.Where(p => p.ProductName.StartsWith("A")).ToList();
7.EFCore会对查询出来的数据进行缓存、跟踪。跟踪监控造成额外的空间浪费,但能方便更新数据,所以在不涉及修改的情况下(只查询时),我们可以用AsNoTracking()方法来手动关闭跟踪

var result= ProductContext.Products
.Where(p => p.ProductName.StartsWith("A"))
.AsNoTracking()
.ToList();
8.使用异步 ToListAsync()

—————————以上为单个表数据的efcore优化—————————


原文链接:https://blog.csdn.net/YangWeiKe/article/details/130351397文章来源地址https://www.toymoban.com/news/detail-428789.html

到了这里,关于efcore性能调优的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • EFcore CodeFirst生成数据表

    项目中创建类,然后通过模型实体类,生成数据库中的表。下图为工程结构,同时本机上已经安装了Mysql数据库,创建了hxdata数据库。也可以通过数据库表迁移生成实体类。  1.创建数据模型类 2.从NuGet安装包 Microsoft.EntityFrameworkCore.Tools Pomelo.EntityFrameworkCore.MySql 3.创建数据库上下

    2024年02月05日
    浏览(33)
  • EFCore-12 一对一关系配置

    商品订单和快递单的关系,一般情况下是一对一的,在网上购买商品下一个订单,这个订单会生成一个对应的快递单。如下图所示: 新建一个控制台应用程序 控制台项目结构: 项目引用的程序集: Microsoft.EntityFrameworkCore.SqlServer  Microsoft.EntityFrameworkCore.Tools    1.在实体类中

    2024年02月06日
    浏览(38)
  • Net8 EFCore Mysql 连接

    一、安装插件 Pomelo.EntityFrameworkCore.MySq (这里要选8.0.0以上版本低版本不支持.net8) 二、配置数据库连接串  appsettings.json 中配置数据库连接串 三、添加实体类Student和数据库上下文 新建 Entities 目录,在,根据表及字段,在目录下新建 Student 实体类,在类上加  [Table(\\\"student\\\")] 表

    2024年02月22日
    浏览(46)
  • EFCore 从入门到精通-6(详谈查询)

    1.初始准备 1.1 工具准备 1.2 程序准备 按照上一个项目,创建相关的实体类和EFLearnDbContext,修改EFLearnDbContext的内容,这里介绍下简单的配置。 1.3 准备数据 准备一下数据,在Program里如下添加这些基础数据,运行后注释下面的代码。 2.基础回顾以及探寻 2.1 单个查询 单个查询,

    2024年02月04日
    浏览(36)
  • 【.NET_EFCore中常见错误汇总】

    记录一下在配置分层项目中所遇到的问题: 问题一:         启动项目没有引用:Your startup project \\\'8.1-MVC \\\' doesn\\\'t reference Microsoft.EntityFrameworkCore.Design. This package is required for the Entity Framework Core Tools to work. Ensure your startup project is correct, install the package, and try again.  解决方法:将

    2024年02月06日
    浏览(38)
  • XAF中XPO与EFCore的探讨

    首先抛出一个问题,在XAF项目中,我们现在可不可以选择EFCore?每个人可能都有自己的答案,这也没有什么标准答案。下面是我的个人看法,在刚接触XAF时,如何选择ORM,我也是犹豫了许久,最终选择了XPO,主要基于以下几点考虑 1.XPO是DEV的产品,支持力度及倾向性要比EFC

    2024年02月05日
    浏览(30)
  • .net core 多项目中使用EFCore

    类库一级项目使用.net core 3.1 框架 其中EFCore是和数据库交互的 MultiCore 注入EFCore中的DBContext与数据库交互 主要为了解决多项目中数据库迁移失败问题 EFCore 工程安装如下包 MultiCore 安装如下 EFCore person.cs personconfig.cs EFDbcontext.cs EFDbContextFac .cs 这是关键,但是这仅仅在开发环境下

    2024年02月07日
    浏览(88)
  • EFCore 使用FluntApi配置 全局查询筛选器

    我们在类中通常会有一个属性为 IsDel来表示软删除或也称逻辑删除,这个属性会导致我们在进行查询操作时,每一次都要 .where(s=s.IsDel==false) 非常的麻烦。在使用efCore时可以通过配置查询筛选器来很好的解决这个问题。 我们SysUser类中的IsDel属性代表我们的软删除。 我这里自己

    2024年02月05日
    浏览(40)
  • ORM核心功能之导航属性- EFCore和 SqlSugar

    导航属性是作为.NET ORM核心功能中的核心,在SqlSugar没有支持导航属性前,都说只是一个高级DbHelper, 经过3年的SqlSugar重构已经拥有了一套 非常成熟的导航属性体系,本文不是重点讲SqlSugar而是重点讲导航属性的作用,让更多写Sql人还未使用ORM的人了解到ORM的作用。   用户根据

    2024年02月07日
    浏览(29)
  • VS2022 webapi SQLite EFcore 最简单部署

    一、我有一个sqlite单文件数据库,里面有一张表material,我想把这张表的数据,让c# webapi程序从服务器上输出成json,让客户端可以查询到数据。 二、使用VS2022,安装ASP.net相关开发组件。 三、VS2022中新建一个项目,项目的类型是webapi,用的是 ASP.NET Core 技术。 产生项目的时候,

    2024年02月06日
    浏览(78)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包