我在一個更大的項目中遇到了這個問題,我設法在縮小的單頁面情況下查明並重現它。頁面有一個按鈕控制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
。第二,將0到99之間的整數寫入不同行的文本文件「sample.txt」中。 點擊btnSubmit
會觸發一個回傳(按鈕不會做任何其他事情,只是爲了回發頁面)。回傳後,價值sessionCount = 1
和test = "Hello World"
。這是預期的行爲,上面的代碼運行良好。
現在,如果你改變n = 9000
或任何大的整數,在回發(通過點擊btnSubmit
),會話變量Session["test"]
爲空和sessionCount = 0
。 test
引發異常,因爲Session["test"]
不存在。是什麼賦予了?我的開發機器有6GB的內存,內存不足是不可能的,因爲處理成千上萬的整數並不需要太多。
如果你把一個破發點的9000時間循環它擊中後?也許它會因爲要求寫同一個文件9000次而中斷?我敢打賭,如果你用using語句包裝了for循環,我會感興趣的,儘管 –
寫入文本文件運行良好,但我有興趣知道它爲什麼不起作用。用預期內容生成的文本文件。空的異常僅在'string test = Session [「test」]時被拋出。ToString();' –
有趣的,我會繼續關注爲什麼會這樣,你是否試圖在for語句中包裝for循環,只是爲了看看這是不是原因 –