首页 > 解决方案 > 需要帮助分析 ASP.Net Core 3.1 内存转储

问题描述

我准备为此付费!

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

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

最大保留尺寸

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

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

标签: c#asp.net-corememory-managementmemory-leaksdotmemory

解决方案


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

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


推荐阅读