我有一個遺留網站,需要一點優化,因爲性能差。它是一個asp.net購物網站,其中linq以sql作爲數據層,MVP模式作爲UI模式。緩存數據,直到更改
db中最昂貴的實體是具有一對多關係的產品和類別表。除非管理員組的用戶決定添加產品或類別等,否則這兩個實體可能不會定期更改。我想知道爲每個請求創建和從這兩個實體獲取所有內容的資源成本高昂是多少!所以如果我可以有一種方法來保持我的數據活着...
首先,我認爲好吧讓我們使用AJAX進行數據檢索,所以我將只創建那些我需要查詢或綁定的實體,但是請等待,我該如何才能這樣做,而不創建一個新的DataContext實例? 另一方面,由於內存成本的原因,對整個DataContext使用緩存被認爲是一個糟糕的決定。那麼這裏最好的選擇是什麼?我該如何改進?
UPDATE
1)做什麼@HatSoft建議。
缺點:那些方法不會幫助你的代碼,只有數據庫。除此之外,可能會有內存問題,因爲我們將數據放入內存而不是呈現html,但這可能是關於解耦的最佳選擇。
2)使用輸出緩存,我們在與*的.aspx通配符的HTTP處理程序的代碼:
string pagePath = Context.Request.Url.AbsolutePath;
object cacheKey = application[pagePath];
if(cacheKey == null)
return; //application restarted/first run so cache the stuff
else
Context.Response.RemoveOutputCacheItem(pagePath);
缺點:現在我們應該鏈接的PAGEPATH到該頁面使用的每個數據庫實體,但如果我這樣做,那麼我將它們聯繫起來而不是將它們分開。這種方法也會遇到一些硬編碼。
3)另一種解決方案是輸出緩存後緩存模式,而不是控制緩存模式。使用Subsituation元素並將OutPutCache Duration設置爲86400,以便每24小時重新創建頁面。
缺點:硬編碼用戶控件爲動態生成Subsituation元素的html輸出。
那麼你有什麼建議?
檢查我的更新。 – jim 2012-08-06 13:37:00