ASP.NET MVC:类成员在 HTTPPost 之后会留在内存中还是释放
本文关键字:内存 释放 HTTPPost MVC NET ASP 成员 之后 | 更新日期: 2023-09-27 18:37:19
我将对我的应用程序管理员(角色为"admin"的用户)进行 ftech 列表,并将它们存储在自定义模型控制器及其create
操作中的List<ApplicationUser> AdminList
中。 AdminList
填充在"创建操作"中,以填充视图中create
下拉列表。
我想知道列表是否有可能,即 AdminList
将在调用创建及其回发之间处理?换句话说,是否需要在回发方法中再次填充AdminList
,否则永远不会发生释放?
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
上下文,例如应用程序重新启动),则填充它。 否则,它只会包含上次放在那里的任何内容。