c# - Microsoft DI 容器 _transientDisposables 未处理(内存泄漏)
问题描述
我们正在为我们的 asp.net Sitecoer MVC CMS Web 应用程序使用 ASP.NET MS DI 容器。
我们注意到在负载测试期间内存迅速增长。查看内存转储,我注意到 _transientDisposable 持有太多 IDisposable 集合。MS DI 是否应该在 GC 收集时处理这些收集?下面是容器注册。
我的问题:
我的所有服务都注册为 SCOPED(根据请求)。
为什么 ServiceProvider 不处理 IDosable 集合。MS Container 是否应在请求结束时处理这些集合。
阅读这些线程并没有太多意义。是 MS DI 的错误还是我做的不对:
https://github.com/aspnet/AspNetCore/issues/5496 https://github.com/aspnet/DependencyInjection/issues/456
解决方案
这可能是由于您(或某些第三方)直接从 root 解析对象图IServiceProvider
,而不是从IServiceScope
. 一次性瞬态在作用域内被引用,因此它们可以在作用域结束时被释放。但是,当您从根容器解析时,根容器成为范围,并且这些一次性瞬态在根容器内被引用,并且只有在根容器被释放时才会被删除。然而,根容器只有在应用程序结束时才会被释放。
长话短说:使用 MS.DI 时,切勿从根容器解析。
推荐阅读
- c# - 当用户表获得新记录时,使用 .NET Core 标识中的用户 ID 在另一个表中创建记录
- reactjs - 反应表不呈现单元格值
- angular - 窗口打开时未触发 Firebase Web 推送通知
- xaml - 如何在 UWP 中调整 NavigationView 和 SplitView 的大小
- plc - TwinCAT 中数组的多变量分配
- python - django后台404.感觉URL配置错误
- c# - 如何将输出添加到 NUnit HTML 报告
- c++ - 如何在 C++ 中将“double”值返回到小数点后两位
- clips - 我应该如何在 CLIPS 中编写此规则?
- extjs - Extjs 网格的自定义 IP 排序