我正在开发一个网站,其中每种类型的用户({guest,loggedIn})都可以在不同的文化中查看[N]页面({en-US ...})。我正在使用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]页面?
还有一点需要注意:页面仅缓存在服务器内存中
答案 0 :(得分:1)
它不会杀死服务器,因为缓存有一个有限的限制。它不会超过某个边界。 ASP.NET以实用方式管理缓存大小。当存在内存稀缺时,它将从缓存中清除最少使用的项目。所以,你很安全。
但是在缓存中放置这么多项意味着你不会给其他数据留下很多机会留在缓存上。您应该查看Windows性能计数器并检查ASP.NET OutputCache命中率,看看您是否真的受到输出缓存的好评。