2011-03-14 35 views
0

假設我需要從數據庫中填充4或5個下拉菜單項。每個下拉菜單中都會有15個項目。這些項目幾乎從不改變。查詢數據庫或緩存小型結果集的性能更佳?

現在,我可以在每次訪問頁面時查詢數據庫,或者我可以從自定義類中獲取值,以檢查它們是否已經存在於ASP.Net的緩存中,並且僅當它們不查詢數據庫更新緩存。

這是微不足道的,我寫的,但我不能確定的服務表現會更好與否。我想認爲它會(雖然不可能有任何巨大的)。

您認爲如何?

回答

6

當性能問題時,你應該總是:

  1. 首先做的事情簡單辦法(避免過早優化)
  2. 性能與設定績效目標(例如200毫秒的響應時間測試代碼在N concurent用戶的負載)
  3. 然後,IF您的代碼不進行再分析代碼,以確定哪些是緩慢的,並配置您的建議PERFORMA nce修正了準確測量真實世界性能變化的內容。

說了這麼一句話,是的,你的建議似乎很明智(你通常會期望內存中的緩存比數據庫更快),但是它也取決於返回什麼數據,內存是什麼您的應用程序的負載,查詢多麼昂貴的是什麼查詢參數等等

你應該表現測試更改之前和之後,確定更改的實際效果(包括像記憶負荷),並且只有在確定這些下拉列表是造成不可接受的性能問題的原因後,才應該真的這樣做。

+1

同意。只有在數據庫速度太慢時纔會緩存,並且無法進一步加速。 – Ben 2011-03-14 08:07:51

0

IO通常比存儲器操作更昂貴(按數量級)。特別是如果你的數據庫在另一臺機器上,那麼你甚至會使用網絡資源,並且只使用緩存肯定會更快。

不過說實在的,優化到底什麼時候你真的測量確定它爲一個性能瓶頸。

0

快速回答你的問題:

  1. 使用內置在.net中緩存。

附加的考慮點上..

  1. 優選地,檢索在單個數據庫中檢索所有主數據(認爲存儲過程和數據集):雖然,我不主張使用存儲的特效的在全部的情況。
  2. 正如你所說的,確保你的數據訪問層在進行數據庫往返之前檢查緩存
  3. 另外,因爲你的下拉值不會經常改變;請記住保持很長的期限
  4. 最後,根據您的頁面設計,您還可以看看片段緩存(部分頁面緩存:用戶控件),它可以給您更大的好處,因爲您既不訪問數據緩存也不訪問數據庫。

性能: 此外,與直接往返取回主數據相比,性能更多取決於應用程序的負載。簡而言之,正如Thomas建議使用緩存類一樣!