代码
一、页面输出缓存OutPutCache
要实现页面输出缓存,只要将一条 OutputCache 指令添加到页面即可。
<% @ OutputCache Duration = " 60 " VaryByParam = " none " Location = ServerAndClient %> // 在服务器和客户端都缓存
二、片段缓存,用户控件输出缓存
<% @ OutputCache Duration = " 60 " VaryByParam = " Id;PageIndex " %>
该示例将缓存用户控件 60 秒,并且将针对查询字符串的每个变动为每个页面创建单独的缓存页面。
<% @ OutputCache Duration = " 60 " VaryByParam = " none " VaryByControl = " CategoryDropDownList " %>
该示例将缓存用户控件 60 秒,并且将针对查询字符串的每个变动、针对此控件所在的每个页面创建单独的缓存条目。
<% @ OutputCache Duration = " 60 " VaryByParam = " None " VaryByCustom = " browser " %>
VaryByCustom 用于支持浏览器自定义为了使每个浏览器都具有单独的缓存条目,VaryByCustom 的值可以设置为 " browser " 。此功能已经内置在缓存模块中,并 且将针对每个浏览器名称和主要版本插入单独的页面缓存版本。
实现
片段缓存使用的语法与页面级输出缓存一样,但其应用于用户控件(.ascx 文件)而不是 Web 窗体(.aspx 文件)。除了 Location 属性,对于 OutputCache 在 Web 窗体上支持的所有属性,用户控件也同样支持。用户控件还支持名为 VaryByControl 的 OutputCache 属性,该属性将根据用户控件(通常是页面上的控件,例如,DropDownList)的成员的值改变该控件的缓存。如果指定了 VaryByControl,可以省略 VaryByParam。最后,在默认情况下,对每个页面上的每个用户控件都单独进行缓存。不过,如果一个用户控件不随应用程序中的页面改变,并且在所有页面都使用相同的名称,则可以应用 Shared = " true " 参数,该参数将使用户控件的缓存版本供所有引用该控件的页面使用。
<% @ OutputCache Duration = " 60 " VaryByParam = " none " VaryByControl = " CategoryDropDownList " %>
该示例将缓存用户控件 60 秒,并且将针对 CategoryDropDownList 控件的每个不同的值、针对此控件所在的每个页面创建单独的缓存条目。
<% @ OutputCache Duration = " 60 " VaryByParam = " none " VaryByCustom = " browser " Shared = " true %>
最后,该示例将缓存用户控件 60 秒,并且将针对每个浏览器名称和主要版本创建一个缓存条目。然后,每个浏览器的缓存条目将由引用此用户控件的所有页面共享(只要所有页面都用相同的 ID 引用该控件即可)。
三、数据缓存
缓存数据引用模式
每当我们尝试访问缓存中的数据时,都应该考虑到一种情况,那就是数据可能已经不在缓存中了。因此,下面的模式应该普遍适用于您对缓存的数据的访问。在这种情况下,我们假定已缓存的数据是一个数据表。
public DataTable GetCustomers( bool BypassCache)
{
string cacheKey = " CustomersDataTable " ;
object cacheItem = Cache[cacheKey] as DataTable;
if ((BypassCache) || (cacheItem == null ))
{
cacheItem = GetCustomersFromDataSource();
Cache.Insert(cacheKey, cacheItem, null ,
DateTime.Now.AddSeconds(GetCacheSecondsFromConfig(cacheKey),
TimeSpan.Zero);
}
return (DataTable)cacheItem;
}
ASP.NET清除页面缓存
( 1 ) 服务端
Response.Buffer = true ;
Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds( - 1 );
Response.Expires = 0 ;
Response.CacheControl = " no-cache " ;
Response.AddHeader( " Pragma " , " No-Cache " );
( 2 ) 客户端
< HEAD >
< META HTTP - EQUIV = " Pragma " CONTENT = " no-cache " >
< META HTTP - EQUIV = " Cache-Control " CONTENT = " no-cache " >
< META HTTP - EQUIV = " Expires " CONTENT = " 0 " >
</ HEAD >
// 清除数据缓存
IDictionaryEnumerator CacheEnum = Cache.GetEnumerator();
while (CacheEnum.MoveNext())
{
Cache.Remove(CacheEnum.Entry.Key.ToString());
}
// 清除页面缓存
string PagePath = " /Default.aspx " ;
HttpResponse.RemoveOutputCacheItem(PagePath);
PagePath = " /TodayRecomend.aspx " ;
HttpResponse.RemoveOutputCacheItem(PagePath);
要实现页面输出缓存,只要将一条 OutputCache 指令添加到页面即可。
<% @ OutputCache Duration = " 60 " VaryByParam = " none " Location = ServerAndClient %> // 在服务器和客户端都缓存
二、片段缓存,用户控件输出缓存
<% @ OutputCache Duration = " 60 " VaryByParam = " Id;PageIndex " %>
该示例将缓存用户控件 60 秒,并且将针对查询字符串的每个变动为每个页面创建单独的缓存页面。
<% @ OutputCache Duration = " 60 " VaryByParam = " none " VaryByControl = " CategoryDropDownList " %>
该示例将缓存用户控件 60 秒,并且将针对查询字符串的每个变动、针对此控件所在的每个页面创建单独的缓存条目。
<% @ OutputCache Duration = " 60 " VaryByParam = " None " VaryByCustom = " browser " %>
VaryByCustom 用于支持浏览器自定义为了使每个浏览器都具有单独的缓存条目,VaryByCustom 的值可以设置为 " browser " 。此功能已经内置在缓存模块中,并 且将针对每个浏览器名称和主要版本插入单独的页面缓存版本。
实现
片段缓存使用的语法与页面级输出缓存一样,但其应用于用户控件(.ascx 文件)而不是 Web 窗体(.aspx 文件)。除了 Location 属性,对于 OutputCache 在 Web 窗体上支持的所有属性,用户控件也同样支持。用户控件还支持名为 VaryByControl 的 OutputCache 属性,该属性将根据用户控件(通常是页面上的控件,例如,DropDownList)的成员的值改变该控件的缓存。如果指定了 VaryByControl,可以省略 VaryByParam。最后,在默认情况下,对每个页面上的每个用户控件都单独进行缓存。不过,如果一个用户控件不随应用程序中的页面改变,并且在所有页面都使用相同的名称,则可以应用 Shared = " true " 参数,该参数将使用户控件的缓存版本供所有引用该控件的页面使用。
<% @ OutputCache Duration = " 60 " VaryByParam = " none " VaryByControl = " CategoryDropDownList " %>
该示例将缓存用户控件 60 秒,并且将针对 CategoryDropDownList 控件的每个不同的值、针对此控件所在的每个页面创建单独的缓存条目。
<% @ OutputCache Duration = " 60 " VaryByParam = " none " VaryByCustom = " browser " Shared = " true %>
最后,该示例将缓存用户控件 60 秒,并且将针对每个浏览器名称和主要版本创建一个缓存条目。然后,每个浏览器的缓存条目将由引用此用户控件的所有页面共享(只要所有页面都用相同的 ID 引用该控件即可)。
三、数据缓存
缓存数据引用模式
每当我们尝试访问缓存中的数据时,都应该考虑到一种情况,那就是数据可能已经不在缓存中了。因此,下面的模式应该普遍适用于您对缓存的数据的访问。在这种情况下,我们假定已缓存的数据是一个数据表。
public DataTable GetCustomers( bool BypassCache)
{
string cacheKey = " CustomersDataTable " ;
object cacheItem = Cache[cacheKey] as DataTable;
if ((BypassCache) || (cacheItem == null ))
{
cacheItem = GetCustomersFromDataSource();
Cache.Insert(cacheKey, cacheItem, null ,
DateTime.Now.AddSeconds(GetCacheSecondsFromConfig(cacheKey),
TimeSpan.Zero);
}
return (DataTable)cacheItem;
}
ASP.NET清除页面缓存
( 1 ) 服务端
Response.Buffer = true ;
Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds( - 1 );
Response.Expires = 0 ;
Response.CacheControl = " no-cache " ;
Response.AddHeader( " Pragma " , " No-Cache " );
( 2 ) 客户端
< HEAD >
< META HTTP - EQUIV = " Pragma " CONTENT = " no-cache " >
< META HTTP - EQUIV = " Cache-Control " CONTENT = " no-cache " >
< META HTTP - EQUIV = " Expires " CONTENT = " 0 " >
</ HEAD >
// 清除数据缓存
IDictionaryEnumerator CacheEnum = Cache.GetEnumerator();
while (CacheEnum.MoveNext())
{
Cache.Remove(CacheEnum.Entry.Key.ToString());
}
// 清除页面缓存
string PagePath = " /Default.aspx " ;
HttpResponse.RemoveOutputCacheItem(PagePath);
PagePath = " /TodayRecomend.aspx " ;
HttpResponse.RemoveOutputCacheItem(PagePath);

283

被折叠的 条评论
为什么被折叠?



