c# - 依赖注入 .NET Core 2.2 导致的内存泄漏
问题描述
我在Visual Studio 2019中开发了一个.NET Core (2.2) API 。有 2 个自定义 nuget 包,即 Auth 和 Log,它们分别用于身份验证和日志记录。
Auth 包内部引用了 Log 包。我在Startup.cs类 (services.AddScope(XXX)) 的配置服务方法中使用了依赖注入。
当服务部署在OpenShift上时,我们发现大量内存泄漏,内存不断以指数方式增长并达到限制,从而重新启动 pod。
到目前为止,已经尝试了以下方法/解决方案
增加 OpenShift 中的内存限制
通过设置为 false 来禁用服务器 GarbageCollection
升级到.NET framework3.1
实现 IDisposable 和 Disposing 在各个控制器调用中创建的对象
强制 GCCollect
AddSingleton 而不是 AddScoped
使用 Visual Studio 性能分析器验证是否启动了 GC。在本地调试环境中调用 GC。
但是不是消费包,而是直接在API解决方案中包含Auth和Log的类文件并调用时,没有内存泄漏。将它们构建为包并使用依赖注入的目的被打败了。
在调用 API 的依赖注入中使用自定义包的最佳方法是什么?有没有一种方法可以有效地处理通过 DI 创建的对象而不归因于内存泄漏?
解决方案
推荐阅读
- symfony - Symfony Voters 仅用于检查用户权限?
- haskell - 累加器版本的递归
- c++ - 我可以多次使用相同的 std::promise 和 std::future 对象吗?
- python - 关于python3列表删除的问题。为什么我不能删除偶数和奇数?
- javascript - 如何在电子应用程序中访问相机/网络摄像头?
- powerbi - 在 DAX/Power BI 中对值进行排序
- javascript - 未找到 404 NotFoundError:未找到 - Node.js Express
- reactjs - DetailsList 组件未考虑选择属性
- powershell - Web-Deploy 中的 SkipFolderList 参数跳过的不仅仅是文件夹
- facebook-graph-api - 如何从服务器端的客户 Instagram 和 Facebook 公共页面获取媒体?