gpt4 book ai didi

c# - ASP.NET 页面未从内存中删除

转载 作者:太空狗 更新时间:2023-10-29 23:47:54 28 4
gpt4 key购买 nike

我在使用 ASP.NET 应用程序时遇到了严重的内存问题。似乎每次加载页面时,页面的旧实例都不会从内存中删除。如果按十次 F5,内存会增加 10-20MB 到实例。在压力和性能测试期间,这会耗尽内存并且 Web 服务器会崩溃...

我运行了 ANTS 内存分析,它确认每次加载页面时,旧的实例都保留在内存中。我的所有 ASP.NET 网页也都使用母版页。同样,如果我加载页面 10 次,则存在 10 个网页实例,以及 10 个母版页实例...

http://oi51.tinypic.com/21msy2g.jpg

查看 ants 分析器的结果,您可以看到每次重新加载页面都会增加大约 320Kb 的内存,这只是网页,甚至不考虑母版页。我的应用程序是一个捕获应用程序的人寿保险应用程序,因此它需要大约 30-40 页。所以你可以明白为什么这是一个大问题。

我将如何找出将页面保存在内存中的原因?我不知道从哪里开始...:\

我所有的页面都使用 Unity 和依赖注入(inject)来注册服务...不确定在 page_onUnload 期间我是否需要取消注册这些服务。

编辑

好的,我已经设法找到问题所在。页面未处理(GCollected)的原因是因为 Unity 服务实例已注册但在页面卸载期间从未取消注册。这就是我在页面上使用 Unity 的方式:

我通过公共(public)属性注入(inject)服务

    #region Services

[Dependency]
public ReviewReportService SummaryService { get; set; }

[Dependency]
public Portfolios.PortfolioService PortfolioService { get; set; }

#endregion

然后页面初始化,我做 Unity Buildup:

    protected override void OnInit(EventArgs e)
{
base.OnInit(e);

ApplicationContainer.BuildUp(this.Context, this);
}

现在很明显,当页面经历其正常生命周期并调用 Unload 时,由于依赖项注入(inject)引用,它无法卸载...我只是不确定如何注销服务(SummaryService、PortfolioService)

我尝试在 OnUnload 中调用以下内容,但它什么也没做:

ApplicationContainer.GetContainer(上下文).Teardown(这个);

最佳答案

您在某处有一个对 Page 的静态引用,它无法被释放。

关于c# - ASP.NET 页面未从内存中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7199087/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com