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.cnblogs.com/wugh8726254/archive/2023/04/29/17363553.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:efcore性能调优 - Python技术站

(0)
上一篇 2023年4月30日
下一篇 2023年4月30日

相关文章

  • 浅谈ASP.NETCore统一处理404错误都有哪些方式

    ASP.NET Core统一处理404错误的方式有多种,本文将详细讲解这些方式,包括实现过程、示例说明等。 方式一:使用中间件处理404错误 ASP.NET Core提供了中间件来处理404错误。我们可以在Startup.cs文件中添加以下代码: public void Configure(IApplicationBuilder app, IWebHostE…

    C# 2023年5月16日
    00
  • asp.net(C#) Access 数据操作类

    当使用asp.net(C#)开发网站时,常常会用到数据库来存储和管理数据。而Access数据库是一个常见的轻量级数据库,为了方便我们对Access数据库进行数据操作,我们可以使用Access 数据操作类。下面将从以下几个方面对Access 数据操作类进行详细讲解: 数据库连接 数据库操作 示例说明 1. 数据库连接 在使用Access 数据操作类时,首先需要…

    C# 2023年6月3日
    00
  • C#往线程里传递参数的方法小结

    针对“C#往线程里传递参数的方法小结”,我将分以下几步来进行详细讲解: 一、参数传递的基本方法 在C#中,向Thread线程传递参数有多种方法。其中最常用的一种是通过将参数封装到一个对象中,再将该对象传递给Thread.Start()方法。这个对象可以是任何一个类的实例,常用的方式是使用匿名类型或者是Tuple类型。 具体来说,可以按照如下方式编写代码: i…

    C# 2023年6月7日
    00
  • 详解WPF如何在基础控件上显示Loading等待动画

    下面我会详细讲解如何在WPF基础控件上显示Loading等待动画的完整攻略。 使用WPF Toolkit自带的Loading动画 WPF Toolkit是一个由Microsoft约定和支持的开源项目,该项目包含了一些方便的控件和工具。其中就包含了Loading动画的控件。 第一步:引入WPF Toolkit 首先要引入WPF Toolkit,可以通过NuGe…

    C# 2023年6月6日
    00
  • 简单了解.NET Framework

    下面是关于“简单了解.NET Framework”的完整攻略,包含两个示例。 1. .NET Framework简介 .NET Framework是一个由Microsoft开发的应用程序框架,它提供了一组用于开发和运行Windows应用程序的技术。.NET Framework包括一个运行时环境(Common Language Runtime)和一个类库(Fr…

    C# 2023年5月15日
    00
  • AspNetCore&MassTransit Courier实现分布式事务的详细过程

    以下是“AspNetCore&MassTransitCourier实现分布式事务的详细过程”的完整攻略: 什么是分布式事务 分布式事务是指跨多个数据库或应用程序的事务。在分布式系统中,由于数据存储在不同的地方,因此需要确保所有数据的一致性。分布式事务可以确保所有数据的一致性,即使在发生故障的情况下也能保持数据的一致性。 AspNetCore&…

    C# 2023年5月12日
    00
  • 基于c# 接口的实例详解

    当我们想要实现面向对象编程中的多态特性时,可以通过使用接口来实现。在C#中,接口(interface)是一种抽象类型,它定义了一组方法、属性、索引器和事件,但不提供其具体实现。在实际编程中,我们可以在类中实现接口,并且实现类中的方法和属性可以不同,这样就可以实现不同类对象的相同行为。 对于使用C#接口的实例,我们可以按照以下步骤进行实现: 第一步:定义接口 …

    C# 2023年6月6日
    00
  • C#中循环语句:while、for、foreach的使用

    C#中循环语句:while、for、foreach的使用 循环语句是编程中非常常用的语句结构之一。C#语言中提供了三种不同的循环语句,分别是while、for和foreach。在这篇文章中,我们将详细讲解这三种循环语句的用法,包括其语法、示例和注意事项。 while循环 while循环在执行时,先判断循环条件是否满足,如果满足则执行循环体中的语句,然后再次判…

    C# 2023年6月7日
    00
合作推广
合作推广
分享本页
返回顶部