2

ASP 4.5 アプリケーションを実行しています。ユーザーがいくつかの質問に答え、ボタンを押してテストを終了する必要があるページの 1 つ。私のアプリケーションでは、テキスト ファイルを使用してユーザーの回答を分析しています。ユーザーがすべてをすばやく実行すると、アプリケーションは正常に動作しますが、テストを完了するのに 20 分以上かかると、例外が発生します

閉じた TextReader から読み取ることができません

ボタンが押されたときだけ StreamReader を開くので、何が問題なのかわかりません。これは私のコードの一部です:

 protected void Page_Load(object sender, EventArgs e)
 {
    if (!IsPostBack)
    {
        GlobalVariables.surname = Request.QueryString["surname"];
        GlobalVariables.name = Request.QueryString["name"];
        GlobalVariables.gender = Request.QueryString["gender"];
        GlobalVariables.age = int.Parse(Request.QueryString["age"]);
    } 
    Label1.Width = 700;
    Button1.Click += new EventHandler(this.Button1_Click);
 }

 void Button1_Click(Object sender, EventArgs e)
 {
    var f0= new FileStream(Server.MapPath("./key.txt"), FileMode.Open, FileAccess.Read);
    StreamReader sr = new StreamReader(f0); 
    //..... 
    sr.Close();
    sr.Dispose();
  }

誰か助けてくれませんか?

4

3 に答える 3

2

彼がテストを完了するのに20分以上かかると、例外が発生します

セッションの有効期限が切れたようです。これを修正するには、JavaScript を追加して Web サーバーへのハートビートを確立することをお勧めします。ハートビートはセッションを存続させます。1 分ごとにリクエストを送信する以外に何もする必要がないため、サーバーはユーザーがまだそこにいることを認識します。

于 2015-03-11T14:31:29.107 に答える
1

Joel からの回答に加えて、ファイルの処理とファイルの読み取りを分離することをお勧めします。

List<string> lines = new List<string>();
using (var f0 = new FileStream(Server.MapPath("./key.txt"), FileMode.Open, FileAccess.Read))
{
    string line;
    using (StreamReader reader = new StreamReader(f0))
    {
        while ((line = reader.ReadLine()) != null)
        {    
            lines.add(line);
        }
    }
}

// it would need to be a very big text file to be a memory issue
// do your processing here
于 2015-03-11T15:01:30.960 に答える