假設我需要從數據庫中填充4或5個下拉菜單項。每個下拉菜單中都會有15個項目。這些項目幾乎從不改變。查詢數據庫或緩存小型結果集的性能更佳?
現在,我可以在每次訪問頁面時查詢數據庫,或者我可以從自定義類中獲取值,以檢查它們是否已經存在於ASP.Net的緩存中,並且僅當它們不查詢數據庫更新緩存。
這是微不足道的,我寫的,但我不能確定的服務表現會更好與否。我想認爲它會(雖然不可能有任何巨大的)。
您認爲如何?
假設我需要從數據庫中填充4或5個下拉菜單項。每個下拉菜單中都會有15個項目。這些項目幾乎從不改變。查詢數據庫或緩存小型結果集的性能更佳?
現在,我可以在每次訪問頁面時查詢數據庫,或者我可以從自定義類中獲取值,以檢查它們是否已經存在於ASP.Net的緩存中,並且僅當它們不查詢數據庫更新緩存。
這是微不足道的,我寫的,但我不能確定的服務表現會更好與否。我想認爲它會(雖然不可能有任何巨大的)。
您認爲如何?
當性能問題時,你應該總是:
說了這麼一句話,是的,你的建議似乎很明智(你通常會期望內存中的緩存比數據庫更快),但是它也取決於返回什麼數據,內存是什麼您的應用程序的負載,查詢多麼昂貴的是什麼查詢參數等等
你應該表現測試更改之前和之後,確定更改的實際效果(包括像記憶負荷),並且只有在確定這些下拉列表是造成不可接受的性能問題的原因後,才應該真的這樣做。
這就是存在System.Web.Helpers.WebCache類。
IO通常比存儲器操作更昂貴(按數量級)。特別是如果你的數據庫在另一臺機器上,那麼你甚至會使用網絡資源,並且只使用緩存肯定會更快。
不過說實在的,優化到底什麼時候你真的測量確定它爲一個性能瓶頸。
快速回答你的問題:
附加的考慮點上..
性能: 此外,與直接往返取回主數據相比,性能更多取決於應用程序的負載。簡而言之,正如Thomas建議使用緩存類一樣!
同意。只有在數據庫速度太慢時纔會緩存,並且無法進一步加速。 – Ben 2011-03-14 08:07:51