2011-07-25 4 views
0

すべてのタイプのユーザー({guest、loggedIn})が異なる文化({en-US ...})で[N]ページを表示できるWebサイトを開発しています。私は、各ページのキャッシュを処理するためにGetVaryByCustomStringを使用しています:文化ごとのユーザー1人あたりのOutputCaching、メモリの性能

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のヒット率を確認して、実際に出力キャッシュにヒットしているかどうかを確認する必要があります。

関連する問題