2010-02-24 17 views
1

考慮我的dataTable包含10,000行,我想知道將數據表存儲在會話變量中的缺陷...我想使用它,直到添加新行...將數據表(10,000行)存儲在會話變量中的缺陷?

什麼類型的會話模式應該我用?

+0

爲什麼?你是否高估了讀取10k行的成本?每次需要數據時,似乎不需要重新排列少量的行就會影響性能。 –

回答

0

不要這樣做,它不推薦使用..它會影響性能,如果您的服務器具有低內存和繁忙的處理時間。

之前有了這個,你需要考慮

  1. 是你的服務器有一個可用的內存繼續?
  2. 你的服務器有多忙?
  3. 您要放入會話的數據是否會在多個用戶請求之間共享?

爲什麼你想要將這麼多的數據存儲到一個會話中。或許你可能會這樣做分頁(在我假設的數據網格中),那麼你必須重新考慮你的設計。

0

如果你需要通過你的用戶會話的數據,然後將它存儲在會話是好的。但在你的情況下,你可以選擇ViewState或Cache。你可以在ViewState中存儲更好。

ViewState [「Table」] = ds.Tables [0];

檢索它,

DataSet ds = new DataSet(); ds =(DataSet)ViewState [「Table」];

  1. 如果在分配會話變量之前,或者當前會話超時,則會導致NullReferenceException,因爲在從會話變量讀取之前不會發生空值檢查。
  2. 有沒有簡單的方法來跟蹤會話變量,它們的鍵名,它們的數據類型,每個會話使用的近似內存使用情況等

但千萬記住一件事把DataSet中的ViewState的內會增加頁面加載。

**

最有效的方法做你 問什麼是這是 返回由DB成通用列表 的數據集轉換,然後使用會話,以便 舉行列表。列表將花費較少的 內存然後數據集在會話中。

**

0

首先,你真的需要存儲在一個會話級的數據量。 您是否可以在應用程序級別上存儲更多(緩存對象)。

如果您有一個服務器場,即多個iis服務器,則必須使用內存緩存或sql緩存中的 。 內存緩存中的大塊會更快。 如果它在該服務器的內存中的單臺計算機上工作。

我會認真考慮重構問題。 你可以引入分頁或其他形式的數據窗口,以減少數據量 ?

0

數據集很大,我真的不認爲你應該將它存儲在會話或視圖狀態。以SQL狀態存儲也會有巨大的讀寫開銷。在內存會話中存儲將顯着影響您的工作進程內存使用情況。在ViewState中存儲更糟,因爲頁面大小和編碼和解碼視圖狀態所需的時間會導致頁面加載速度非常慢。

如果你真的必須這樣做,我會在記憶會議中付出所有的選擇並付出代價。否則,我認爲你應該考慮重構你的代碼,而不必緩存這種大小的數據表,並根據需要在一個集合/頁面中提取數據。或者,如果您有分層架構,請將應用程序代碼緩存起來,並在請求發生時,應用程序代碼可以在需要時提取記錄/子集並將其返回給UI。