2013-03-05 38 views
1

我正在編寫一個C#/ asp.net頁面,並且當前有大量數據(比如100 000個Datetime int對)在頁面加載時從數據庫中提取出來,然而,每頁加載相同的數據似乎有點愚蠢。我曾考慮將此值存儲在會話中,但多個瀏覽器選項卡似乎會造成問題。在Asp.net會話中存儲大量數據

是否有更好的方式來存儲這些值,並使用適當的會話,如果我需要支持多個瀏覽器選項卡?

+1

是爲每個用戶不同的數據,或者是它爲所有用戶相同的數據(DateTime的詮釋對)? – Kane 2013-03-05 13:26:32

+1

多標籤與它有什麼關係? – asawyer 2013-03-05 13:26:32

+1

聽起來像'.Cache'的工作,不是嗎? – 2013-03-05 13:28:01

回答

8

你的會話耗盡了大量的服務器內存。你可以將你的會話存儲在數據庫中(因爲這就是爲什麼你希望將它們存儲在會話中的原因),但是在行之間閱讀(爲什麼每個訪問者需要100,000個獨特的日期時間對?)我認爲你應該真的考慮將這些值存儲在緩存中(如果它們對於所有用戶都是一樣的話)。

在會話中存儲100k int對的問題是,它可能適用於1或2,甚至可能有一打用戶。但是,當你的網站變得流行時,它根本就不可擴展。您的服務器將無法存儲每個100,000個int對的500,000個用戶會話。 你會很快用完內存

+2

很快甚至沒有開始描述服務器內存耗盡的速度。 – 2013-03-05 14:07:09

+0

根據用戶類型的不同,數據可能會有所不同,但我應該可以編寫一些代碼來有效地使用緩存。謝謝, – will 2013-03-05 14:31:58

0

該會話可能會變得笨拙。你可能想要考慮一個母版頁來包裝你的頁面。然後,你可以在主頁中加載一次數據,並將其保存在頁面中,或者放置在頁面上的隱藏對象(如文字)上能夠訪問。

爲什麼你需要頁面之間的所有對?

+1

您對太多數據的解決方案是將其置於視圖狀態並將其向上和向下推送到客戶端? – asawyer 2013-03-05 13:32:23

+0

true - 也可以放在主人的Javascript上,讓客戶處理它。我喜歡下面的解決方案,如果它對所有用戶來說都是相同的,那麼就緩存它 – Feuerwehrmann 2013-03-05 13:33:42

2

如果此數據對每個用戶都是唯一的,那麼會話可能是緩存數據的有效位置。雖然,如果你這樣做,那麼你應該意識到你添加到會話中的東西保持在那裏,並且需要刪除。此外,由於您在每個用戶會話中存儲大量數據,因此您會消耗大量的服務器內存。這就是史蒂夫的答案 - 你可能很容易發現自己沒有多個用戶擁有大量會話數據的空間

如果數據不會因用戶而異,那麼cache就是答案!