ASP.NET Tutorial/Cache/User Control

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Caching with a User Control

OutputCache directive causes the contents of the User Control to be cached in memory for a maximum of 10 minutes (600 seconds).
File: Control.ascx
<%@ Control Language="C#" ClassName="Products" %>
<%@ OutputCache Duration="600" VaryByParam="none" %>
User Control Time:
<%= DateTime.Now.ToString("T") %>
<asp:GridView
    id="grdProducts"
    DataSourceID="srcProducts"
    Runat="server" />
<asp:SqlDataSource
    id="srcProducts"
    ConnectionString="<%$ ConnectionStrings:Products %>"
    SelectCommand="SELECT Title,Director FROM Products"
    Runat="server" />

File: ShowUserControlCache.aspx
<%@ Page Language="C#" %>
<%@ Register TagPrefix="user" TagName="Products" Src="~/Control.ascx" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
 "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Show User Control Cache</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    Page Time:
    <%= DateTime.Now.ToString("T") %>
    <hr />
    <user:Products
        id="Products1"
        Runat="server" />
    </div>
    </form>
</body>
</html>


Creating a User Control Cache File Dependency

File: Control.ascx
<%@ Control Language="C#" ClassName="ProductFileDependency"
%> <%@ OutputCache Duration="9999" VaryByParam="none" %>
<script runat="server">
    void Page_Load()
    {
        CacheDependency depend = new CacheDependency(MapPath("~/Products.xml"));
        this.CachePolicy.Dependency = depend;
    }
</script>
User Control Time:
<%= DateTime.Now.ToString("T") %>
<hr />
<asp:GridView
    id="grdProducts"
    DataSourceID="srcProducts"
    Runat="server" />
<asp:XmlDataSource
    id="srcProducts"
    DataFile="Products.xml"
    Runat="server" />


Programmatically caching a User Control.

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<script runat="server">
    void Page_Load()
    {
        PartialCachingControl cacheMe = (PartialCachingControl)Page.LoadControl("Control.ascx");
        cacheMe.CachePolicy.SetExpires(DateTime.Now.AddSeconds(15));
        PlaceHolder1.Controls.Add(cacheMe);
        lblCacheDuration.Text = cacheMe.CachePolicy.Duration.ToString();
    }
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Show Dynamic User Control</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    Cache Duration:
    <asp:Label
        id="lblCacheDuration"
        Runat="server" />
    <hr />
    <asp:PlaceHolder
        id="PlaceHolder1"
        Runat="server" />
    </div>
    </form>
</body>
</html>
            
File: Control.ascx
<%@ Control Language="C#" ClassName="Products" %>
<%@ OutputCache Duration="600" VaryByParam="none" %>
User Control Time:
<%= DateTime.Now.ToString("T") %>
<asp:GridView
    id="grdProducts"
    DataSourceID="srcProducts"
    Runat="server" />
<asp:SqlDataSource
    id="srcProducts"
    ConnectionString="<%$ ConnectionStrings:Products %>"
    SelectCommand="SELECT Title,Director FROM Products"
    Runat="server" />


Sharing a User Control Output Cache

File: Control.ascx
<%@ Control Language="C#" ClassName="SharedProducts"%> 
<%@ OutputCache Duration="600" VaryByParam="none" Shared="true" %>
User Control Time:
<%= DateTime.Now.ToString() %>
<asp:GridView
    id="grdProducts"
    DataSourceID="srcProducts"
    Runat="server" />
<asp:SqlDataSource
    id="srcProducts"
    ConnectionString="<%$ ConnectionStrings:Products %>"
    SelectCommand="SELECT Title,Director FROM Products"
    Runat="server" />