最好是在會話中保留數據集還是在每次回發中填充數據集?在會話中保留數據與在回發中填充
回答
這取決於很多因素。如果會話處於正常狀態或在狀態服務器上,通常最好不要將太多項目保存在會話內存中,因爲它的可伸縮性較差。
如果您的會話駐留在數據庫上,那麼查詢和重新填充數據集可能會更好,除非查詢的執行成本很高。
保持會話。如果需要,可以選擇重新填充,例如會話內存已被擦除。
這取決於你將會做多少以及會話數據存儲在服務器上的位置。
保持會話中的數據集肯定會影響內存使用情況。如果您使用SQL Server狀態,所有會話變量都存儲在內存中,或存儲在SQL Server中。您還可以使用狀態服務器模式將負載卸載到其他機器。
序列化/反序列化方面。如果使用非常大的數據集,可能會嚴重影響服務器的性能。
另一方面有頁面上的非常大的視圖狀態可能是一個真正的性能殺手。所以我會保留會話或緩存中的數據集,並尋找一種「outproc」方式來存儲會話數據。
既不 - 「保持」任何東西!僅顯示用戶需要查看的內容,並構建高效的分頁方案以查看行向後或向後行。
RP
我通常會保持會話,如果它不是太大和/或DB是遠遠慢。如果數據很大,一般來說,最好重新加載。
有時我使用緩存,我第一次從Db加載並將其放入緩存中。回發期間,我檢查chache,如果它是空的,我重新加載。 所以服務器自己管理緩存。
由於我希望儘可能少的數據庫操作,我會保持會話中的數據,但我不知道什麼是最好的方式來做到這一點。我該如何處理併發性,並且由於數據是在兩個用戶同時使用該頁面時共享的,因此我怎樣才能確保他們中的每一個在會話中都有自己的一組數據?
會話的麻煩是,如果它在proc中它可能會消失,這不是很好,如果它是狀態服務器,那麼你必須序列化,並且如果它是sql狀態,那麼無論如何你都要做一次往返!
如果結果集很大,請執行自定義分頁,以便只返回總結果的一小部分。
然後如果您認爲多個用戶會看到此結果集,請將每個頁面放入緩存中,以確保緩存在數據更改或更改一段時間後不會被訪問時更新。
如果您不想進行多次往返,並且您認爲自己已經獲得了內存,那麼會將整個數據集塞入緩存中,但要小心它不會融化Web服務器。
使用緩存意味着用戶不需要自己的一組數據,而是使用全局組。
只要在加載插入/編輯頁面時併發執行,您需要用新數據填充它並在添加/更新後更新緩存。
我是一個非常信任解耦的人,如果有的話,我很少會看到需要將完整的數據集拋出到用戶界面。
您應該只將對象傳遞給需要使用的UI,除非您顯示的是大圖或某種需要顯示數據之間關係的數據結構,否則不值得花費。
更小的數據子集(如果適用)效率更高。您的應用程序是否實際使用UI上數據集中的所有功能?如果沒有,那麼最好的方法就是隻傳遞你顯示的數據。
如果你通過它將數據綁定到控件和排序/分頁等,你可以實現大量的接口,使數據集支持這一點,在一小段代碼。
在那個筆記上,我會保存緩存中基本上是靜態的數據(例如,它不會經常更新)。因此,您需要查看數據更新的頻率,然後才能真正爲此做出決定。
最後,我會說這個了,我認爲有必要利用在用戶界面中的數據集非常,非常rarely..it是一個非常沉重的數據對象和查看數據需求的成本效益,對緩解實施,可能遠遠超過緩存數據集的需要。
恕我直言,如果您擔心性能或內存利用率,數據集相當糟糕。
我在需要來自多個表的數據的gridview中顯示摘要數據。數據集非常大,所以viewstate不是一個選項。我還需要數據才能在回發中生存。 – kjv 2008-11-06 12:06:32
你的回答並不暗示使用這些數據。它是參考數據嗎?用戶是否積極更新它?是否有多個用戶意圖在任何時候都具有更新權限?
沒有任何比您提供的信息更好的信息,請遵循公認的說法,即在會話中保留大量數據是保證您的應用程序不會規模並且需要大量資源爲少數人提供服務的一種方法。
通常有更好的方法來管理大型數據集,而不需要加載內存中的所有數據。
如果您的應用程序數據需求確實很龐雜,那麼請考慮使用Web服務後端的沉重客戶端。它可能比製作網頁更合適。
不要使用會話!如果用戶使用不同的請求打開第二個選項卡,會話將被重用並且結果不會是他/她預期的結果。您可以使用ViewState和Session的組合,但在採取緩存措施之前,仍然可以測量無需任何緩存即可處理多少內容。
正如其他答案已經指出,答案「取決於」。不過,我會假設您正在討論用戶之間共享的數據。在這種情況下,您應該而不是將數據集存儲在用戶的會話中,但在回發時重新填充。
此外,您應該在應用程序的數據訪問層附近填充緩存,以提高交互性能並減少數據庫上的負載。緩存的設計將再次取決於數據的類型(只讀與讀/寫或主要讀取)。
該方法將用戶會話(UI層概念)從數據管理中分離出來,並提供了支持共享使用緩存數據(在數據在用戶間通用的情況下)的額外好處。
- 1. 在HttpClient中保留會話
- 2. 列表保留在回傳後填充
- 3. 不保留在Spring會話bean數據
- 4. 會話不保留數據
- 5. 保留Vaadin會話數據
- 6. 在用戶會話期間在MVC中保留數據
- 7. 如何在Orchard CMS中使用會話數據填充零件
- 8. 回發數據不保留
- 9. 如果dropdownlist在formview中並且在運行時被填充,它在回發後不會保留值
- 10. Spring MVC在會話中保留用戶數據
- 11. 如何在交叉源請求中保留會話數據?
- 12. openxava在Threadlocal變量中保留會話作用域數據
- 13. 會話值不保留在IE7中
- 14. 在會話中保留Django用戶
- 15. 在django.test.client中保留會話ID
- 16. 在所有會話中保留PSModulePath
- 17. 在HttpHandlers中保留會話變量
- 18. 在Cordova Webview中保留用戶會話
- 19. 保留在回發
- 20. 填充ListView與保存在sharedPreferences中的數據
- 21. 更改會話ID並保留數據?
- 22. Yii會話數據不保留給CCaptcha
- 23. 會話[]保留數據多久?
- 24. 在iPhone中保存會話數據
- 25. 在數據庫中保存會話
- 26. 在會話中保存數據庫值
- 27. codeigniter set_userdata不會保留會話數據中的類型
- 28. 簡單的存儲在會話之間不會保留數據
- 29. 在sklearn中保留數據
- 30. 在Webmatrix中保留數據
根據定義,會話內存對每個用戶都是唯一的。 – Maxam 2008-11-01 16:51:54
然而,如果用戶爲同一頁面打開兩個標籤呢? – kjv 2008-11-06 12:03:28