控制器的静态成员存活的时间

本文关键字:时间 静态成员 控制器 | 更新日期: 2023-09-27 17:50:52

我有一个控制器在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();
    }
 }

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

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

控制器的静态成员存活的时间

静态变量对于AppDomain是全局的,并且在AppDomain的生命周期内持续。这个值不是特定于用户的,在ASP.NET的情况下,它会一直存在,直到web应用程序重新启动。

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