ASP.NET MVC:类成员在 HTTPPost 之后会留在内存中还是释放

本文关键字:内存 释放 HTTPPost MVC NET ASP 成员 之后 | 更新日期: 2023-09-27 18:37:19

我将对我的应用程序管理员(角色为"admin"的用户)进行 ftech 列表,并将它们存储在自定义模型控制器及其create操作中的List<ApplicationUser> AdminList中。 AdminList填充在"创建操作"中,以填充视图中create下拉列表。

我想知道列表是否有可能,即 AdminList将在调用创建及其回发之间处理?换句话说,是否需要在回发方法中再次填充AdminList,否则永远不会发生释放?

ASP.NET MVC:类成员在 HTTPPost 之后会留在内存中还是释放

HTTP 是无状态的。

与 WPF 应用程序或 Winfows 窗体应用程序等不同,Web 应用程序不维护充满内存中状态的"正在运行的应用程序"。 (至少不是以相同的直觉方式。 每个请求每次都会建立一个新状态。 对于 MVC,这包括控制器的新实例。 (或者在 Web 窗体的情况下,页面的新实例。

为了使数据从一个请求持久化到另一个请求,您需要将其持久化到某个位置。 "某处"可能是一大堆不同的地方。 页面的表单元素、Cookie、会话、静态变量、数据库、文件等。

例如,如果此"管理员列表"相对静态且不太可能更改,并且对于站点的所有用户都相同,则可以将其存储在静态属性中,如果未设置,该属性将延迟加载。 结构上是这样的:

private static List<ApplicationUser> _adminList;
private static List<ApplicationUser> AdminList
{
    get
    {
        if (_adminList == null)
            _adminList = GetAdminsFromData();
        return _adminList;
    }
}

(当然,无论您如何填充列表,该函数调用都会这样做。

这样,使用代码就永远不需要知道或关心列表是否已填充。 只需使用 AdminList 属性,如果尚未填充该属性(如果出于任何原因清除了static上下文,例如应用程序重新启动),则填充它。 否则,它只会包含上次放在那里的任何内容。