比如說網站有一個header.ascx用戶控件,每個頁面都調用此控件作為"頁面頭部",直接可以緩存此用戶控件就可以提交性能,不過,現在此header.ascx用戶控件要顯示登陸用戶的登陸名,所以,就不能直接用下面這種緩存方式:
<% @ outputcache duration = " 86400 "  varybyparam = " none "   %> 
這個時候就可以利用"根據自定義字符串來緩存頁"這種方法了,具體如下:
<%@ outputcache duration="86400" varybyparam="none" varybycustom="headerpagekey" %>
然后在global類里面重寫方法 getvarybycustomstring 
        public override string getvarybycustomstring(httpcontext context, string custom)
        {
            if(custom=="headerpagekey")
            {
                //緩存 header.ascx 控件
                if(context.request.isauthenticated)
                {
                    return context.user.identity.name;
                }
                else
                {
                    return "noauthenticated_user";
                }
            }
            return base.getvarybycustomstring (context, custom);
        }
用戶如果沒有登陸,那么緩存一個版本,如果已經登陸,那么根據登陸名的不同緩存另外一個版本,哈哈,為每個用戶都緩存了一個版本,這樣做,應該說不是很好的解決方法。
上述緩存技術可以參考 http://msdn.microsoft.com/library/chs/default.asp?url=/library/chs/cpguide/html/cpconcachingversionsofpagebasedonparameters.asp
另外,mspetshop3.0里面也用到了這樣的緩存方法,根據request.querystring以及是否登陸來緩存不同的版本,不過,這個緩存好像默認沒有開啟。
新聞熱點
疑難解答