记.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用的太多了,从来没注意过有缓存释放这种说法。
分类:
.Net Core知识点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
2023-09-25 实现自定义 .NET 缓存策略以提高应用性能
2023-09-25 在 .NET 中实现基于角色的权限控制
2023-09-25 在 .NET 中使用策略模式优化业务逻辑