关于c#中“静态”字段的清除

时间:2011-02-01 10:59:02

标签: c# static

我的应用程序中有commonFields类。这是在线asp.net mvc简单测试/考试的应用。假设学生已使用他的证书登录。他得到了选择测试,然后说加载它。它会在某个控制器中加载测试,每个测试都有一组问题。现在有了这个测试ID我得到了那个特定测试的问题列表。并存储在公共类

 public static List<Question> questionList; 

对象。由于静电,它将与应用程序一样。但是如果同一时间其他学生登录并执行相同或不同的测试。然后他选择的测试问题将再次存储在questionList对象中(与上面相同)。

就像说100名学生进行测试一样。那么对questionList有什么影响?它总是需要实例化吗?在commonField类中?怎么管理这个?或者由于静态CLR会管理它吗?

4 个答案:

答案 0 :(得分:5)

您应该将常用数据存储在Application对象和Session中的每个学生数据中。

在某些时候,每次会议一次:

  Session["questions"] = CreateQuestionList();

然后在您需要的时候:

   questionList = (List<Question>)Session["questions"] ;

您的static变量不可靠,不会扩展到多个服务器,并且肯定不会为每个学生提供不同的questionList。

答案 1 :(得分:1)

作为静态字段,

  

questionList

对于所有登录的学生,

应保持通用。因此,您必须为每个学生实例化一个新的QuestionsList实例,并将其存储在该学生的会话中。

答案 2 :(得分:1)

您需要在会话中输入用户的测试ID。不要尝试在类字段或其他任何内容中的用户请求之间保存对象状态。 此外,您还需要注意缓存 ASP.NET对象,以便快速访问上次加载的测试问题。

答案 3 :(得分:1)

您应该使用Session而不是将您的问题存储在静态字段中。

List<Question> questionList=new List<Question>();
//fill the list with your questions
Session["Questions"] = questionList;

然后,如果您需要当前学生的问题,请使用:

List<Question> questionList=(List<Question>)Session["Questions"];