记.Net Core Host服务使用Dapper内存溢出问题

背景

项目要做一个数据迁移,牵扯大概60多张表,几千万数据,这些数据都被放到了csv文件中并拆分成了10w条记录一个文件。

思路是使用.Net Core Host开一个线程去读取文件夹csv根据业务导入到表就可以。

ps:第一次用Dapper做这种处理

问题

在导入过程中,因为我们的服务器内存只有8G。经常跑一会服务器就内存溢出了。

因为我们开始的设计就是一个csv导入完成,释放,第二个csv加载,应该不会有内存溢出问题。

我们一开始怀疑是不是csv数据读取到内存没有释放,也怀疑过Cli的虚拟内存占用问题。

调查

没办法,直接上工具查内存。一查结果是SQLMapper有个缓存。

原因

Dapper 使用一个内部缓存来存储 SQL 查询和相应的命令类型,以提高性能。但是,如果查询非常频繁且各不相同,这个缓存可能会占用大量内存。

为了防止内存溢出,需要手动调用 SqlMapper.PurgeQueryCache() 方法来清理缓存

结论

怎么说呢,第一次用Dapper不知道有这个东西,开始从来没怀疑过Dapper也是EF用的太多了,从来没注意过有缓存释放这种说法。

posted @ 2024-09-25 12:38  初久的私房菜  阅读(35)  评论(1编辑  收藏  举报
作者:初久的私房菜
好好学习,天天向上
返回顶部小火箭
好友榜:
如果愿意,把你的博客地址放这里
张弛:https://blog.zhangchi.fun/