当前位置: 首页 > news >正文

(实战)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.mrgr.cn/news/63117.html

相关文章:

  • Vue3.js - 计算属性监视属性
  • 【Hive sql面试题】找出连续活跃3天及以上的用户
  • 一、Go语言快速入门之基础语法
  • 【第一个qt项目的实现和介绍以及程序分析】【正点原子】嵌入式Qt5 C++开发视频
  • ELK-01-kibana安装
  • 「Mac畅玩鸿蒙与硬件8」鸿蒙开发环境配置篇8 - 应用依赖与资源管理
  • Python爬虫必备利器:urllib库全面解析
  • 在树莓派 Raspbian 11 上使用 pyenv 安装 Python 3.9
  • Maven 插件
  • 基于单片机的宠物自动喂食系统的设计
  • Vue 动态属性 []
  • 2024年10月总结及随笔之漏更及失而复得
  • 多线程和线程同步基础篇学习笔记(Linux)
  • 微服务实战系列之玩转Docker(十七)
  • 【2024工业图像异常检测文献】SuperSimpleNet: 统一无监督和监督式学习检测快速可靠的表面缺陷检测方法
  • 数字信号处理Python示例(1)使用Python生成正弦信号
  • 模板初阶及STL简介
  • OpenAI推出搜索GPT,进军搜索引擎领域
  • c++/qt连接阿里云视觉智能开发平台
  • 【图书介绍】案例可借鉴的Spring应用开发书
  • RabbitMQ的发布订阅模式
  • CSS 动画:网页设计的动态之美
  • 流水线(Pipeline)技术
  • ARKit读取LiDAR点云
  • C语言数据结构之二叉树(BINARY TREE)链式存贮的简单实现
  • 猫头虎分享:Claude AI、ChatGPT 和 知乎直答的 AI 搜索大战