2011-07-25 59 views
0

我正在開發一個網站,其中每種類型的用戶({guest,loggedIn})都可以在不同的文化({en-US ...})中查看[N]個網頁。我使用GetVaryByCustomString來處理每個頁面緩存:每種文化的用戶輸出緩存,內存性能

Public Overrides Function GetVaryByCustomString(ByVal currentContext As HTTPContext, ByVal customArgs As String) As String   
    Select Case customArgs 
     Case "userAndCulture" 
      Return String.Format("{0}{1}", Languages.getLanguageID(), User.getUserID(0)) 
    End Select 
    Return MyBase.GetVaryByCustomString(currentContext, customArgs) 
End Function 

注:getUserID()有DBNull.Value的默認「returnValueWhenNull」(它使用SQL的大部分工作),所以我要送0(零),所以所有的客人都會有相同的頁面。

不過,我的主要問題是:這樣的機制不會在內存方面殺死服務器?我的意思是,沒有潛在的[loggedInUsersCount] * [culturesCount] * [pagesCount]頁面?

還要說明一點:頁面在服務器內存中緩存只有

回答

1

它不會殺死服務器因爲緩存具有有限的限制。它不會超過某個邊界。 ASP.NET以實用的方式管理緩存大小。當內存不足時,它會從緩存中刷新最少使用的項目。所以,你是安全的。

但是,在緩存中放置這麼多項目意味着您沒有給其他數據很多機會留在緩存中。您應該查看Windows性能計數器並檢查ASP.NET OutputCache命中率,以查看您是否確實在輸出緩存中獲得了良好的命中。