控制器的静态成员存活多久?

use*_*335 0 c# asp.net asp.net-mvc session

我在 ASP.NET 中有一个像这样的控制器:

 public class FileUploadController : Controller
 { 
    // ...
    static List<ThreePartKey> uploadedFiles = new List<ThreePartKey> ();
    // ... 

    public ActionResult Index ( )
    {
       // ...
    }

    [HttpPost]
    public ActionResult Index (HttpPostedFileBase file, 
                               string selectedOrgName, 
                               string selectedCatName)
    {
        // ...
        uploadedFiles.Add(new ThreePartKey { 
             orgname = selectedOrgName, 
             catname = selectedCatName, 
             filename = fileNameNoExtension });

        ViewBag.uploadedFiles = uploadedFiles;
        return View();
    }
 }
Run Code Online (Sandbox Code Playgroud)

其中第二个Index函数上传用户选择的文件并将其信息添加到已上传文件的列表中。该列表信息用于构建 HTML 表格。List<ThreePartKey> uploadedFiles我最终添加前缀的原因static是因为如果没有它,我的列表将只有每次调用时最后上传的文件Index

该列表在内存中保留多长时间?我希望它与 user 相对应sessions,但我不确定。

Col*_*lin 5

静态变量对于 AppDomain 来说是全局的,并且在 AppDomain 的生命周期内持续存在。对于 ASP.NET,该值不是特定于用户的,并且基本上会一直保留到 Web 应用程序重新启动为止。

还值得注意的是,静态变量不一定是线程安全的,因此操作变量时应小心。在您的情况下, List<ThreePartKey> 本质上不是线程安全的,因此您应该在代码中适应这一点(除非您更改实现以使用会话变量或其他东西)。