当前位置: 代码网 > it编程>编程语言>Asp.net > efcore性能调优

efcore性能调优

2024年05月12日 Asp.net 我要评论
性能调优——EFCore调优 按下硬件、网络不提,我们单表从程序层面对系统的性能进行优化,翻来覆去无外乎三个方面 缓存 异步 sql本片文章,我们针对.net core web项目的ef core框架进行性能优化。 1. EF Core框架已经本地缓存机制memorycache,所以我们访问一个接口 ...

性能调优——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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com