1. 首页
  2. 文章列表
  3. 关于EFCore的上下文池DbContextPool和延迟加载LazyLoader冲突的探索

微软官方在EFCore2.x开始,推荐使用DbContextPool以提高应用的性能,而本站项目自开发之初就一直用了延迟加载,所以之前本站项目也是用到了DbContextPool和延迟加载,而本站的发布周期也比较频繁,基本上一两天就会发布一次更新,所以一直都没有发现DbContextPool和延迟加载同时开启会导致内存泄漏的问题,直到最近才发现,网站如果持续几天运行,内存会处于一直上升的状态,并且可能会导致挤爆整个服务器停掉而不得不重启机器的那种,经过一段时间的排查,调整GC的模式,观察一段时间,然而并没有什么改善,后来又挨着去不停地优化代码,把一些该using的地方而没有using起来的漏写的给补上,证明内存不是这些非托管对象造成的,这个问题困扰了很久,那就等网站跑几天,等内存上升到一定值之后,把内存dump出来分析看看吧,经过用dotMemory分析内存dump发现,内存被大量的LazyLoader对象持有,几百万个LazyLoader对象,如下图所示:

懒得勤快的博客_互联网分享精神

懒得勤快的博客_互联网分享精神masuit.com|ldqk.org|ldqk.xyz|masuit.tk|ldqk.tk

懒得勤快的博客_互联网分享精神

这咋整啊,难道是EF我哪儿用错了?最有可能的猜测就是DbContextPool和延迟加载冲突了,一群友发了个efcore的issue如下:

懒得勤快的博客_互联网分享精神

懒得勤快的博客_互联网分享精神masuit.com|ldqk.org|ldqk.xyz|masuit.tk|ldqk.tk

看起来DbContextPool和延迟加载确实是冲突的,官方也没有解决办法,那只能二选一咯:要么放弃使用DbContextPool,要么就不用延迟加载

懒得勤快的博客_互联网分享精神masuit.com|ldqk.org|ldqk.xyz|masuit.tk|ldqk.tk

所以本站项目决定为了宝贵的内存,还是选择不用DbContextPool,毕竟改动是最小的,只需要删4个字母就好了,经过几天的验证,不用上下文池内存走势非常平稳,一条直线,美滋滋!懒得勤快的博客_互联网分享精神

Startup.cs中数据上下文的依赖注入代码由:

services.AddDbContextPool<DataContext>

改成了:

services.AddDbContext<DataContext>

懒得勤快的博客_互联网分享精神

结论:DbContextPool和延迟加载是不能兼得的,只能选其一,否则内存爆炸,看官方后续会不会解决这个问题吧!


如果你喜欢这篇文章,欢迎点赞、评论、分享本文!

相关推荐:

下载神器——InternetDownloadManager(IDM) 6.39.3简体中文学习版 Windows+Office激活工具——AAct v4.2.4/ AAct Network 1.2.1 汉化版
Windows 11 Manager v1.0/Windows 10 Manager v3.5.6多语言学习版 Process Lasso 10.3.1.30/ParkControl Pro 1.3.1.8 简体中文学习版
官方正版特价!Internet Download Manager IDM 下载神器 RedGate全家桶SQL ToolBelt 3.1/.NET Reflector 11.1/SQL Prompt 10.7.2学习版下载
全面的C#编码规范整理 博主开源项目——本站博客项目MyBlogs.Core,基于.NET 5
【悬赏令】有偿征集网站安全漏洞和代码层性能优化问题 VisualStudio神级插件Resharper使用技巧基础入门到骨灰玩家全教程+性能优化教程

版权声明:

本文仅用于学习、研究和交流目的,欢迎非商业性质转载。本文链接:https://masuit.com/2049

● 下载遇到问题,请先阅读网站公告!如遇资源报毒,请参阅:https://ldqk.org/misc/14

● 文章内容仅供参考,所涉及的软件以具体使用情况为准!

● 博主在此发文(包括但不限于汉字、拼音、拉丁字母)均为随意敲击键盘所出,用于检验本人电脑键盘录入、屏幕显示的机械、光电性能,并不代表本人局部或全部同意、支持或者反对观点。如需要详查请直接与键盘生产厂商法人代表联系。挖井挑水无水表,不会网购无快递。

● 博主的文章没有高度、深度和广度,只是凑字数。由于博主的水平不高(其实是个菜B),不足和错误之处在所难免,希望大家能够批评指出。

● 博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的纯镀 24k 文章,请原谅博主成为一个无耻的文档搬运工!

● 文章内容部分来源于互联网,本站不代表任何立场;涉及到的软件来源于互联网,仅供个人学习参考,请勿用于商业用途,版权归软件开发者所有,下载后请务必于24小时内删除,请支持正版!因下载本站任何资源造成的损失,全部责任由使用者本人承担!如果你是版权方,认为本文内容对您的权益有所侵犯,请联系本站管理员,并参照侵删联系的说明提交相应的证明材料,本站将进行严格地资质审查和背景调查后,情况属实的将在三天内对本文删除或修正。本站对互联网版权绝对支持!

● 本站一贯非常高度重视知识产权保护并遵守各项知识产权法律、法规和具有约束力的规范性文件。重视正版,打击盗版。根据法律、法规和规范性文件要求,本站旨在保护权利人的合法权益的措施和步骤,当权利人发现在本站生成的链接所指向的第三方网页的内容侵犯其合法权益时,权利人应事先向本站发出"权利通知",本站将根据当地法律法规和政府规范性文件采取措施移除相关内容或链接。 

● 访问本站的用户必须明白,本站对提供下载的第三方软件不拥有任何权利,其版权归该资源的合法拥有者所有。

● 本站保证站内提供的所有可下载资源(软件等)都是按“原样”提供,本站未做过任何改动;但本网站不保证本站提供的下载资源的准确性、安全性和完整性;同时本站也不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害。不论何种情形我们都不对任何由于使用或无法使用本站提供的信息所造成的直接的、间接的、附带的、特殊的或余波所及的损失、灵失、债务或中断负任何责任﹝不论是可预见或是不可预见的,即使我们巳被告知这种可能性﹞。

评论区:

验证码:
    验证码: