(实战)WebApi第9讲:EFCore性能优化(IQueryable延迟查询、取消跟踪机制)

一、例子是第8讲的四、6(EFCore的静态化处理 ):分析ToList()

ToList()在下图绿色框内。

二、在没有最终取数据的时候,使用 IQueryable<T> 延迟执行查询

(1)在没有最终取数据的时候,不要使用ToList等方法,因为他们会直接读取数据库        

   First 和 Find 方法会立即执行查询并从数据库中读取数据,而 ToList 和其他类似的方法(如 ToArrayCount 等)也会立即执行查询,但它们返回的是一个集合。

(2)IQueryable<T> 延迟查询的原理、使用方法、作用

1>原理

1)IQueryable<T>是一个泛型接口,它允许你构建查询但不立即执行它。
2)查询的实际执行会在你迭代 IQueryable 对象(如通过 ToListFirst 等方法)或访问某些属性(如 Count)时发生。

2>使用方法

1)使用.where,一直在拼接sql语句,并没有执行。(因为.where返回的类型也是IQueryable)
2)在最终取数据的时候,使用ToList等这些方法执行sql语句。

3)举例

3>作用:节省开销,能更有效地管理数据库访问。

(3)如何在数据库中查看ToList等方法执行的sql语句?【体验延迟发送数据】

1>打开数据库监听工具

2>在VS中使用ToList()等方法读取数据库:会在数据库中直接执行sql语句

2>在VS中使用IQueryable<T> 延迟执行查询,打上断点查看语句执行过程

1)使用.where,一直是在拼接sql语句,并没有执行(因为.where返回的类型也是IQueryable)

2>到ToList()时,数据库内执行sql语句

二、跟踪机制

1、如何修改数据库里的数据?【推荐】——Update()和SaveChanges()

        m 是一个代表集合 jobs 中每个元素的临时变量(或称为范围变量)。这个变量 m 用于在 Single 方法的条件表达式中引用集合中的每个元素。

2、跟踪机制:在实体查询之后,上下文会自动的跟踪实体。

举例:在上述二、1、进行完后,注释掉.Update(),再次运行仍然能修改数据库里的数据

3、提高EFCore查询效率:取消跟踪机制

1>为什么要取消?:对于有些数据只需要查询,不需要修改。那么此时跟踪机制会增加系统的开销,降低系统性能。

1)如下图,本意是只需要返回job,不需要它做任何的操作。

2)但是由于跟踪机制,系统会自动追加一个自动更新的快照,去追踪job。

3)所以如果按照1)的本意【即不需要它做任何的操作(不需要更新等)】,那么系统的自动跟踪就白做了

2>如何取消跟踪机制?

1)全局取消

2)局部取消

     

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/463036.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三周精通FastAPI:29 定义在返回响应后运行的后台任务

官方文档&#xff1a;https://fastapi.tiangolo.com/zh/tutorial/background-tasks/ 后台任务 你可以定义在返回响应后运行的后台任务。 这对需要在请求之后执行的操作很有用&#xff0c;但客户端不必在接收响应之前等待操作完成。 包括这些例子&#xff1a; 执行操作后发…

Rust的enum枚举的强大用法

在Rust中&#xff0c;enum&#xff08;枚举&#xff09;是一种非常强大的类型&#xff0c;它可以包含多个变体&#xff08;variants&#xff09;&#xff0c;每个变体可以是不同的类型&#xff0c;包括复杂类型。这使得enum在Rust中不仅用于表示简单的状态或选项集合&#xff0…

Python世界:自动化办公Word之批量替换文本生成副本

Python世界&#xff1a;自动化办公Word之批量替换文本生成副本 任务背景编码思路代码实现相关参考 任务背景 为提高办公效率&#xff0c;用python试手了一个word任务&#xff0c;要求如下&#xff1a; 给你一个基础word文档A&#xff0c;格式为docx&#xff0c;名字为&#xf…

Git下载-连接码云-保姆级教学(连接Gitee失败的解决)

Git介绍 码云连接 一、Git介绍 二、Git的工作机制 下载链接&#xff1a;Git - 下载软件包 三、使用步骤 创建一个wss的文件夹&#xff0c;作为‘工作空间’ 四、连接码云账号 五、连接Gitee失败的解决方法 一、Git介绍 Git是一个免费的、开源的分布式版本控制…

【JavaEE初阶】网络原理(4)

欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 网络层 > IP协议 IP协议报头结构 4位版本 4位首部长度 8位服务类型(TOS) 16位总长度(字节数), 16位标识 3位标志位 13位片偏移 8位生存时间(TTL) 8位协议 16位首部…

vue3+vant实现视频播放(含首次禁止进度条拖拽,视频看完后恢复,保存播放视频进度,刷新及下次进入继续播放,判断视频有无全部看完等)

1、效果图 2、 <div><videocontrolsclass"video_player"ref"videoPlayer":src"videoSrc"timeupdate"handleTimeUpdate"play"onPlay"pause"onPause"ended"onVideoEnded"></video><…

LongVU :Meta AI 的解锁长视频理解模型,利用自适应时空压缩技术彻底改变视频理解方式

Meta AI在视频理解方面取得了令人瞩目的里程碑式成就&#xff0c;推出了LongVU&#xff0c;这是一种开创性的模型&#xff0c;能够理解以前对人工智能系统来说具有挑战性的长视频。 研究论文 "LongVU&#xff1a;用于长视频语言理解的时空自适应压缩 "提出了一种革命…

【Spring IOC】实现一个简单的 Spring 容器

1. 理解知识 Spring 容器的作用 Spring 容器是Spring的核心&#xff0c;用来管理Bean对象的。容器将创建对象&#xff0c;把它们连接在一起&#xff0c;配置它们&#xff0c;并管理他们的整个生命周期从创建到销毁。 Bean 对象的管理 当一个 Bean 对象交给 Spring 容器管理…

Pytorch lightning多机多卡训练通讯问题(NCCL error)排查

一、问题 单机多卡可以正常训练模型&#xff0c;多机多卡数据加载完成后卡住不动&#xff0c;排查两台机器可以ping通&#xff0c;表明网络没有问题&#xff0c;查看bug信息是NCCL通信问题。报错信息大致如下: torch.distributed.DistBackendError: NCCL error in: …/torch/c…

攻防靶场(26):hydra爆破web的小技巧 DC-4

目录 1. 侦查 1.1 收集目标网络信息&#xff1a;IP地址 1.2 主动扫描&#xff1a;扫描IP地址段 1.3 主动扫描&#xff1a;字典扫描 1.4 主动扫描&#xff1a;漏洞扫描 2. 初始访问 2.1 有效账户&#xff1a;默认账户 2.2 利用面向公众的应用 3. 凭据访问 3.1 不安全的凭据&…

UOS 安装usb wifi 网卡驱动

电脑上装安uos后发现usb网卡驱动不见了&#xff0c;网卡长下面这个样子&#xff0c;但是官方没有驱动 驱动网址选5300 https://www.ezcast.com/app/ezcast/wifi-adapter/windows 这时我们 lsusb找到相关设备&#xff0c;发现是Realtek 的设备 要在 Ubuntu 上安装 Realtek 0bda…

东方娱乐周刊

文章目录 一、征稿简介二、重要信息三、服务简述四、投稿须知五、联系咨询 一、征稿简介 二、重要信息 期刊官网&#xff1a;https://ais.cn/u/3eEJNv 三、服务简述 学科领域&#xff1a; 人文社科-教育学、文学、艺术、体育、人文社科&#xff1a;其他 四、投稿须知 1.在…

第三方支付系统架构设计

第三方支付是指具备一定实力和信誉保障&#xff0c;并获得国家颁发运营拍照的独立机构&#xff0c;采用和各大银行签约的方式&#xff0c;通过与银行相关接口对接而促成交易的网络支付的模式。我们熟悉的微信支付和支付宝都属于第三方支付工具&#xff0c;第三方支付工具随着移…

计算机网络八股文个人总结

1.TCP/IP模型和OSI模型的区别 在计算机网络中&#xff0c;TCP/IP 模型和 OSI 模型是两个重要的网络协议模型。它们帮助我们理解计算机通信的工作原理。以下是它们的主要区别&#xff0c;以通俗易懂的方式进行解释&#xff1a; 1. 模型层数 OSI 模型&#xff1a;有 7 层&#…

Java日志脱敏(二)——fastjson Filter + 注解 + 工具类实现

背景简介 日志脱敏 是常见的安全需求&#xff0c;最近公司也需要将这一块内容进行推进。看了一圈网上的案例&#xff0c;很少有既轻量又好用的轮子可以让我直接使用。我一直是反对过度设计的&#xff0c;而同样我认为轮子就应该是可以让人拿去直接用的。所以我准备分享两篇博客…

高效实现SCRM用户管理的最佳实践与策略

内容概要 在当今竞争激烈的市场环境中&#xff0c;SCRM用户管理显得尤为重要。SCRM&#xff08;Social Customer Relationship Management&#xff09;不仅仅是简单的客户管理工具&#xff0c;它更是企业与客户之间建立良好关系的一座桥梁。通过深入了解用户的需求和行为&…

Git - 两种方式撤销已提交到远端仓库的记录并删除提交记录

文章目录 命令行方式附 命令行方式 确定要撤销的提交记录 首先&#xff0c;使用以下命令查看提交历史&#xff1a; git log找到想撤销的提交记录的哈希值&#xff08;SHA&#xff09; &#xff0c;比如9c9c98d6f7f28c41d971f8efd51ed31f9720792c 撤销提交记录 根据需求选择以下…

【C/C++】字符/字符串函数(0)(补充)——由ctype.h提供

零.导言 除了字符分类函数&#xff0c;字符转换函数也是一类字符/字符串函数。 C语言提供了两种字符转换函数&#xff0c;分别是 toupper &#xff0c; tolower。 一.什么是字符转换函数&#xff1f; 顾名思义&#xff0c;即转换字符的函数&#xff0c;如大写字母转小写字母&am…

【排序】5.堆排序(详细图解)

文章目录 前言1.建堆方法的选择2.优先使用向下调整的原因3.堆排序图解&#xff08;大堆-升序为例子&#xff09;3.1 向下调整法-建大堆3.2 进行堆排序 4.堆排序代码4.1 向下调整法4.1. 1 小堆4.1. 2 大堆4.2 堆排序 5. 关于小堆——降序6.性能分析 前言 &#x1f431;个人主页&…

头歌——机器学习(线性回归)

文章目录 线性回归简述答案 线性回归算法答案 线性回归实践 - 波斯顿房价预测LinearRegression代码 利用sklearn构建线性回归模型示例代码如下&#xff1a; 代码 线性回归简述 简单线性回归 在生活中&#xff0c;我们常常能碰到这么一种情况&#xff0c;一个变量会跟着另一个变…