动态构造LINQ表达式导致EFCore内存泄漏

 

 

 

EFCore版本 v3.1.4 

上述代码模拟100次的Id包含查询,并且demoExpr1和demoExpr2使用两种方式构造LINQ表达式,第二种会导致内存泄漏。

 

使用第一种方法构造查询条件的值,结果类似,

select * from UserInfo where id = @id

使用第二种方法构造查询条件的值,结果类似

select * from UserInfo where id = 1

 

第二种使用Expression.Constant构造查询条件的值最终生成的SQL语句是硬编码的值,而EFCore缓存语句时由于是硬编码不能重复使用该缓存项,只能多次缓存,因此内存占用会越来越高。

 

 

EF查询编译缓存默认使用的是Microsoft.Extensions.Caching.Memory.MemoryCache

 

posted @ 2020-06-03 16:13  我的伙伴  阅读(553)  评论(0编辑  收藏  举报