动态构造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