0

我准备为此付费!

我的 ASP.Net Core 3.1 应用程序从大约 450MB 开始,逐渐运行到大约 4.5GB(我怀疑如果有更多可用内存它会增长得更多)。

我已经在各个阶段进行了内存转储,并使用dotMemory分析它们似乎表明 JsonSerialiserOptions 是主要嫌疑人:

最大保留尺寸

钻取JsonSerializerOptions显示 3 个实例。两个的数字可以忽略不计,如果我进一步深入研究内存使用率最高的三个中的一个,它的 Key Retention Path 显示如下: 密钥保留路径

这就是我需要帮助的地方。我真的不知道如何处理这些保留路径。我期待如果问题出在我的代码中,我应该在保留路径的底部找到我的应用程序的某个类?我需要帮助试图从这些保留路径中找出问题可能在我的代码中的位置。

4

2 回答 2

0

事实证明,这个问题是由于一个灵活的、运行时定义的数据库查询正在重新调整 typeObject实例而不是type 实例的 bug dynamic。JsonSerializer 正确地不缓存dynamic类型,但它确实缓存Object类型。

所以每次查询运行时,JsonSerializer 都会缓存Object结构。修复是为了确保数据库查询返回dynamic类型而不是Object类型。

于 2021-04-02T06:14:06.747 回答
0

我怀疑您的问题与重新加载更改令牌有关。在 .NET 2.1 中报告了内存泄漏 - 有关更多详细信息,请参阅:https ://github.com/dotnet/aspnetcore/issues/6102

如果您的目标是较新版本的 .Net,我建议您检查您的ConfigureServices()方法 ( Startup.cs) 并消除错误配置的服务生命周期和/或强制依赖项。

于 2021-04-01T04:03:43.660 回答