2010-08-31 60 views
2

其中的方法:靜態變量,視圖狀態,會話和緩存,以避免重複加載和減少查詢數據庫。如何避免在asp.net中對數據庫進行太多查詢?

您認爲上述4的最佳方法是什麼?我認爲緩存是最好的?或者更好的Asp.net 3.5或更高版本的其他方法?

+0

我同意你的看法,因爲它可以管理它自己的內存(在需要時清除)。如果您使用SQL Server與.NET,則可以使用SqlCacheDependency來保持您的緩存和數據庫數據同步! – Zachary 2010-08-31 21:41:18

+0

以上都是緩存解決方案。它們僅在上下文中有所不同靜態變量會在AppDomain的生存期內緩存內存中的數據,因此通常所有用戶都可以使用它。 Viewstate僅在用戶處緩存序列化數據,並僅針對該響應/請求。會話僅爲當前用戶緩存數據(內存中或串行化,具體取決於會話存儲)。 – sisve 2010-08-31 21:48:05

+0

單個Web服務器或Web場?什麼樣的負載平衡?粘或不粘?這些都會對「正確」的答案產生影響。 – 2010-08-31 21:51:30

回答

2

如果正在檢索的數據是用戶特定的,請考慮使用Session。如果所有用戶共享相同的數據,請考慮使用緩存。

我不鼓勵使用視圖狀態來緩存數據庫結果,因爲它會迅速擴大呈現標記的大小。最重要的是,視圖狀態內容不僅必須下載,而且在提交表單時還要將其發回服務器,所以在視圖狀態下,您需要支付兩次性能損失。

你沒有提到的另一個選擇是使用HttpContext.Items集合。這爲每個請求緩存數據庫數據提供了一個很好的方法。如果在頁面中有許多單獨的模塊(例如母版頁和用戶控件)正在檢索相同的數據,則此技術非常有用,因爲它允許一次請求數據,然後在該特定請求的生命週期內對其進行緩存。有關更多信息,請參閱HttpContext.Items - a Per-Request Cache Store

1

對於你的問題沒有單一的答案。一個可擴展且性能良好的良好數據訪問策略可能涉及您提及的幾個甚至所有工具,可能還包括其他所有工具。

0

顯然,當您需要持久數據通過整個會話時,您不會使用viewState,也不會將每個用戶數據保存在您的應用程序對象中。

的ViewState - 每頁
會話 - 每個會話(每用戶)
應用 - 每個應用
餅乾 - 每個用戶(而不是每個會話 - 而整個會話)

您通常會使用緩存對象以緩存應用程序級別的對象..

就是這樣..每個人都有不同的角色。

相關問題