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/p/17363553.html

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

(0)
上一篇 2023年5月5日
下一篇 2023年5月5日

相关文章

  • C#网页信息采集方法汇总

    标题:C#网页信息采集方法汇总 介绍 C#是一种面向对象的编程语言,在网络爬虫中有广泛的应用。本文将介绍C#网页信息采集的基础知识和常用的方法,让大家快速入门。 基础知识 HTML和CSS 网页是由HTML和CSS构成的,HTML用来定义网页的内容结构,CSS用来定义网页的样式和布局。在进行网页信息采集前,需要了解HTML和CSS的基础知识。 HTTP协议 …

    C# 2023年5月31日
    00
  • 谈谈.net对象生命周期(垃圾回收)

    下面我将为您详细讲解”.NET对象生命周期(垃圾回收)”的攻略。 垃圾回收的基本原理 在.NET框架中,所有的对象都是在托管堆(managed heap)中动态分配内存,这个堆会自动管理分配和删除。垃圾回收(garbage collection)是.NET框架中自动管理内存分配和释放的过程。它的基本原理是: 首先,它会监视对象的生命周期,当一个对象不再被引用…

    C# 2023年5月31日
    00
  • Unity封装延时调用定时器

    下面是Unity封装延时调用定时器的完整攻略: 1. 创建Timer类 首先,我们需要创建一个Timer类,用来实现延时和定时功能。这个类应该至少有以下几个方法: Timer(float duration, Action callback):构造函数,接收一个duration参数表示延时或者定时的时间(单位为秒),和一个callback回调函数,在延时或定时…

    C# 2023年6月3日
    00
  • C#返回多少分钟之前或多少分钟之后时间的方法

    下面是详细讲解C#返回多少分钟之前或多少分钟之后时间的方法的完整攻略: 1. 背景知识 在使用C#的DateTime类型进行时间计算时,可以使用AddMinutes方法实现分钟数的加减。 2. 方法说明 下面是一个实现返回多少分钟之前或多少分钟之后时间的方法例子: public static DateTime GetRelativeDateTime(int …

    C# 2023年6月1日
    00
  • C#算法之整数反转

    C#算法之整数反转 1. 题目描述 给定一个32位有符号整数,将其进行反转,返回反转后的整数。 例如: 输入:123 输出:321 输入:-123 输出:-321 输入:120 输出:21 2. 解题思路 我们可以通过将给定整数进行取余操作,不断得到末尾数字,再将其添加到反转后的数的末尾。此外,每次取余操作后,将原数除以10可以将最后一位去掉。 对于正数,一…

    C# 2023年6月7日
    00
  • C#从前面或后面按指定数量删除字符串

    让我为您详细讲解 “C#从前面或后面按指定数量删除字符串” 的完整攻略吧。 方法一:Substring()方法 C#的字符串类型中有一个名为Substring()的方法,可以截取子字符串,从而实现删除指定数量的字符。 从前面删除字符串 从前面删除字符串,需要保留剩余字符串的后面部分,可以使用Substring()方法的起始位置参数startIndex和需要保…

    C# 2023年6月8日
    00
  • asp.net Split分割字符串的方法

    当使用ASP.NET进行开发时,分割字符串是一项非常常见的任务。ASP.NET中的Split()方法是一种简单有效的将字符串分成单独纯文本段的方法。 Split()方法的基本用法 Split()方法可以用于按照指定的分隔符将一个字符串分割成多个子串。其基本用法如下所示: string str = "apple, banana, cherry, da…

    C# 2023年6月3日
    00
  • Log4Net 日志配置[附带源码下载]

    以下是关于Log4Net 日志配置的完整攻略。 Log4Net 简介 Log4Net 是由 Apache 创建并维护的一个基于 .Net 平台的开源日志框架,支持多种输出目标、日志格式和日志级别,可以帮助开发者更加便捷地管理应用程序的日志。 Log4Net 的配置 配置文件 首先需要在项目中引入 Log4Net 的相关库文件。然后,在项目的配置文件(如 ap…

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