控制器的静态成员保持活动多长时间?

时间:2015-05-26 22:58:12

标签: 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();
    }
 }

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

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

1 个答案:

答案 0 :(得分:4)

静态变量是AppDomain的全局变量,并持续AppDomain的生命周期。该值不是特定于用户的,并且在ASP.NET应用程序重新启动之前基本上会保持不变。

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