3

私はより大きなプロジェクトでこの問題に遭遇し、縮小された単一ページのシナリオでそれを特定して再現することができました. このページには、1 つのボタン コントロールbtnSubmitと、次のようなコード ビハインドがあります。

private int n = 100;

protected void Page_Init(object sender, EventArgs e) {
    btnSubmit.Click += btnSubmit_Click;
}

protected void Page_Load(object sender, EventArgs e) {
    if (!Page.IsPostBack) {
        Session["test"] = "Hello World";

        for (int i = 0; i < n; i++) {
            using (StreamWriter file = new StreamWriter(Server.MapPath("/sample.txt"), true)) {
                file.WriteLine(i);
            }
        }
    } else {
        int sessionCount = Session.Count;
        string test = Session["test"].ToString();
    }
}

void btnSubmit_Click(object sender, EventArgs e) {
}

上記のコードは、ページの読み込み時に 2 つのことを行います。最初に、文字列「Hello World」をセッション変数に割り当てますtest。2 つ目は、0 から 99 までの整数をテキスト ファイル "sample.txt" の異なる行に書き込みます。をクリックするとbtnSubmit、ポストバックがトリガーされます (ページをポストバックするためだけに、ボタンは他に何もしません)。ポストバック後、 と のsessionCount = 1test = "Hello World"。これは予想される動作であり、上記のコードは問題なく動作します。

n = 9000または大きな整数を変更すると、ポストバック時に (をクリックしてbtnSubmit)、セッション変数Session["test"]は null になり、sessionCount = 0. 存在しないためtest、例外をスローします。Session["test"]何を与える?私の開発マシンには 6GB の RAM が搭載されています。数千の整数を処理するのにそれほど時間はかからないため、メモリ不足が原因である可能性は低いです。

4

2 に答える 2