DNN 9 MVC模块中的内存泄漏

问题描述 投票:1回答:1

[运行DNN前端网站(主要包含WebForm和MVC模块)的azure应用程序服务上发生内存泄漏。

我通过dotMemory运行了内存转储,发现迄今为止最大的保留大小已由ViewEngineCollection对象类型占用。

据我所知,它应该包含Razor视图引擎以及该Web应用程序中使用的任何其他引擎。

我发现,每个MVC对象的每个实例都作为视图引擎添加到集合中,并且永远不会被垃圾回收-占用了数GB的内存。内存转储时,Gen2内存中有90%以上的内存,因此它们的寿命很长。

考虑一个MVC模块MyMVCModule。假设.cshtml中有一个动作标签,其中包含动态生成的url-似乎在实例化MVC对象时,对象比较器会确定与集合中已有的其他对象的等效性。同一模块版本上的任何细微差异都会导致将其作为“新”引擎添加到内存中。我相信这是一个缓存功能,但是排列如此之多,以至于数量级的存储成本超过了重新实例化MVC对象的成本。内存中有成千上万个模块的副本。

该词典是ModuleDelegatingViewEngine的子级,它是dnn特定的组件,因此,我不认为这个问题通常与MVC框架有关。

<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9PWHJpVC5wbmcifQ==” alt =“ dotMemory输出的部分屏幕截图”>

这是通常的行为吗?如果是这样,有没有办法让我的垃圾收集器更早地清除这些页面?谢谢您的帮助。

asp.net-mvc memory-leaks dotnetnuke dnn-module
1个回答
0
投票

为您提供的一些答案/笔记。不是100%的答案,而是超过评论。

  1. 这不正常,不应该是这种情况
  2. 此类项目应记录到项目本身https://www.github.com/dnnsoftware/dnn.platform中,可以在其中进行跟踪/管理。
  3. 我们正在解决一个问题,尤其是与可能相关的WebAPI模块:https://github.com/dnnsoftware/Dnn.Platform/issues/3186

您能否确认您正在使用哪个特定的9.x版本?还可以提交示例模块吗?

© www.soinside.com 2019 - 2024. All rights reserved.