在我的公司,我们正在开发一个ASP.NET Web应用程序。应用程序本身在表格中使用前端(~8k)的大量数字输入元素。使用这些输入字段,用户可以以类似电子表格的方式编辑数据。生成电子表格的代码本质上是一个嵌套的for循环。
我们遇到的问题是应用程序在部署时有大约12MB的内存使用量。在第一页请求之后,使用量增加到超过100MB并保持在那里。每个后续请求都会增加内存使用量,直到达到700-1000MB。此时,应用程序将每150-200ms运行一次GC循环,但每次只释放几MB。如果用户阻止刷新按钮,则可能会导致网站因OutOfMemoryError
而崩溃。
错误的起源在我们的Razor模板的表生成代码中。在使用dotMemory分析内存使用情况时,结果证明大部分内存都是无人管理的。奇怪的是,堆只有6 MB大。我们对造成这种情况的原因一无所知。生成输入元素的代码只是@Html.EditorFor(model => ...)
。任何有关正确方向的帮助或指示都将不胜感激。