c# - 需要帮助分析 ASP.Net Core 3.1 内存转储
问题描述
我准备为此付费!
我的 ASP.Net Core 3.1 应用程序从大约 450MB 开始,逐渐运行到大约 4.5GB(我怀疑如果有更多可用内存它会增长得更多)。
我已经在各个阶段进行了内存转储,并使用dotMemory分析它们似乎表明 JsonSerialiserOptions 是主要嫌疑人:
钻取JsonSerializerOptions
显示 3 个实例。两个的数字可以忽略不计,如果我进一步深入研究内存使用率最高的三个中的一个,它的 Key Retention Path 显示如下:
这就是我需要帮助的地方。我真的不知道如何处理这些保留路径。我期待如果问题出在我的代码中,我应该在保留路径的底部找到我的应用程序的某个类?我需要帮助试图从这些保留路径中找出问题可能在我的代码中的位置。
解决方案
事实证明,这个问题是由于一个灵活的、运行时定义的数据库查询正在重新调整 typeObject
实例而不是type 实例的 bug dynamic
。JsonSerializer 正确地不缓存dynamic
类型,但它确实缓存Object
类型。
所以每次查询运行时,JsonSerializer 都会缓存Object
结构。修复是为了确保数据库查询返回dynamic
类型而不是Object
类型。
推荐阅读
- vue.js - 弹出在彼此之上 VUEJS3
- javascript - 如何根据键组合对象数组:每个对象的值?
- javascript - Puppeteer - 需要帮助从 h2 和 span 中提取文本
- sideloading - 无法侧面加载基于 WAP 的安装包 - AppInstaller.Exe 失败并出现一般错误代码
- shopware - Shopware 6:为客户群隐藏产品
- maven - Spark 测试用例不适用于 2.4.0 版本
- java - 请求的资源上不存在“Access-Control-Allow-Origin”标头,并且 JWT 令牌在 put 方法上不以 Bearer String 开头
- oauth-2.0 - 将keycloak与spring cloud gateway与多个客户端集成
- python - 具有相等整数键的 Python 排序字典
- sql - 使用连接和位置更新表