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

C# .NET EFCore 性能优化

查询缓存优化

利用EF Core的查询缓存机制,相同的查询语句会被缓存,避免重复编译。对于频繁执行的查询,可以显式启用缓存:

var compiledQuery = EF.CompileQuery((DbContext context, int id) => context.Products.FirstOrDefault(p => p.Id == id));

批量操作处理

使用AddRangeRemoveRange替代单条操作,结合SaveChanges的批处理能力:

context.Products.AddRange(productList);
context.SaveChanges();

启用批处理需要配置SQL Server提供程序:

optionsBuilder.UseSqlServer(connectionString, o => o.MaxBatchSize(100));

延迟加载慎用

导航属性的延迟加载会导致N+1查询问题。显式加载或预加载更高效:

var orders = context.Orders.Include(o => o.OrderDetails).ToList();

异步操作提升吞吐量

使用async/await避免线程阻塞:

var product = await context.Products.FirstOrDefaultAsync(p => p.Id == id);

跟踪行为控制

只读查询禁用变更跟踪:

var products = context.Products.AsNoTracking().Where(p => p.Price > 100).ToList();

索引优化

确保查询字段有数据库索引:

modelBuilder.Entity<Product>().HasIndex(p => p.CategoryId);

SQL日志监控

开发阶段开启日志检查生成SQL:

optionsBuilder.UseLoggerFactory(loggerFactory).EnableSensitiveDataLogging();

分页查询优化

使用Skip/Take时确保有序:

var pagedData = context.Products.OrderBy(p => p.Id).Skip(20).Take(10).ToList();

原始SQL复杂查询

高性能场景直接执行SQL:

var products = context.Products.FromSqlRaw("SELECT * FROM Products WITH (NOLOCK)").ToList();

连接池配置

调整DbContext池大小避免资源争用:

services.AddDbContextPool<AppDbContext>(options => options.UseSqlServer(connectionString), poolSize: 128);

文章转载自:

http://yZrxtjQ2.xmmwj.cn
http://gJQW4mkc.xmmwj.cn
http://JA4H9np6.xmmwj.cn
http://lL5aIfiM.xmmwj.cn
http://ESy6OMv2.xmmwj.cn
http://HVLwbzUo.xmmwj.cn
http://RpIzse5Y.xmmwj.cn
http://5JDtTIOO.xmmwj.cn
http://cqbkPf0n.xmmwj.cn
http://xzyvaISJ.xmmwj.cn
http://F6VhYUMa.xmmwj.cn
http://t2sFNLjU.xmmwj.cn
http://S7S7L2Nc.xmmwj.cn
http://iayHqYK4.xmmwj.cn
http://wTOyiXP1.xmmwj.cn
http://4kxMdgT3.xmmwj.cn
http://lcOegiBK.xmmwj.cn
http://fgMkDkgP.xmmwj.cn
http://8qNPVBHV.xmmwj.cn
http://KyoM4rrB.xmmwj.cn
http://z3cOH7ad.xmmwj.cn
http://XiB7a4nQ.xmmwj.cn
http://O6qKbtVN.xmmwj.cn
http://xYy9yao4.xmmwj.cn
http://DSNmT9on.xmmwj.cn
http://tYjHHx4x.xmmwj.cn
http://NUBXD0lx.xmmwj.cn
http://lhLOezVP.xmmwj.cn
http://OOBwiMp2.xmmwj.cn
http://8Nn6OU0X.xmmwj.cn
http://www.dtcms.com/a/378458.html

相关文章:

  • STM32--时间戳,BKB,RTC
  • Spring Cloud Consul
  • 基于K210和STM32的小区门禁系统(论文+源码)
  • 区块链与分布式账本:重构数字世界的信任基石
  • Java 编程语言详解:从基础到高级应用
  • 在centOS源码编译方式安装MySQL5.7
  • STM32H750 QSPI介绍及应用
  • 【Luogu】P9809 [SHOI2006] 作业 Homework (根号算法)
  • Linux Node.js 安装及环境配置详细教程
  • Node.js介绍与安装
  • Node.js 版本管理全指南:卸载 Node、安装 NVM、常用命令及问题解决
  • 如何在ONLYOFFICE中使用OCR工具:轻松识别图片和PDF中的文字
  • 专题:2025社交媒体营销与电商融合趋势报告:抖音、小红书、短剧、直播全拆解|附210+份报告PDF、数据仪表盘汇总下载
  • Ubuntu22.04如何安装新版本的Node.js和npm
  • Java根据模版导出PDF文件
  • 经济学研究与机器学习应用:R语言实证分析及论文写作指南
  • 洛谷 P1967 [NOIP 2013 提高组] 货车运输(kruskal 重构树 + 求路径最小边权)
  • android 如何判定底部导航栏显示时 不是键盘显示
  • Django入门笔记
  • 中悦大华通过订单日记实现流程重构之路
  • 电波之外:socket套接字,Linux下UDP通信的孤独诗篇
  • 自动驾驶中的传感器技术44——Radar(5)
  • Linux常用命令之top:动态进程排查利器
  • 【Problem】动态规划之跳跃游戏系列
  • Android 相机框架的跨进程通信架构
  • 从零实现成绩管理系统:深入理解 Python 类方法、静态方法和属性封装
  • G1 垃圾收集器深入解析
  • 【Leetcode hot 100】104.二叉树的深度
  • nginx的基础使用
  • AWS 查询 ALB access log