我在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
相对应,但我不确定。
答案 0 :(得分:4)
静态变量是AppDomain的全局变量,并持续AppDomain的生命周期。该值不是特定于用户的,并且在ASP.NET应用程序重新启动之前基本上会保持不变。
值得注意的是,静态变量不一定是线程安全的,因此在操作变量时应该小心。在您的情况下,List&lt; ThreePartKey&gt;本质上不是线程安全的,所以你应该在代码中适应它(除非你改变实现以使用会话变量或其他东西)。