如何:使用文件依赖项缓存页输出

更新:2007 年 11 月

有时候,您可能需要在文件发生更改时从输出缓存中移除某一页。例如,您可能有这样一页:该页从生成 XML 文件作为输出且占用大量进程的报告中获取其内容。仅当 XML 文件发生更改时,才需要重新处理该页。要将重新处理限制为仅在需要的时候进行,可以使页的缓存策略依赖于单个文件。如有必要,可以使缓存页依赖于多个文件。

67z4z916.alert_note(zh-cn,VS.90).gif说明:

通过调用 RemoveOutputCacheItem 方法,可显式移除输出缓存中的任何页。可以从 Global.asax 文件、自定义 ASP.NET 服务器控件或页中执行此操作,具体取决于应用程序的需要。

使缓存页输出依赖于一个文件

  1. 以声明方式或编程方式指定缓存页输出的设置。有关更多信息,请参见如何:设置 ASP.NET 页缓存的过期时间值设置页的可缓存性缓存页的多个版本

  2. 在页代码中调用 AddFileDependency 方法。将创建依赖项的文件的路径作为方法的 filename 参数传递。

    下面的代码示例在 TextFile1.txt 文件上设置一个文件依赖项。当文件发生更改时,将从缓存中移除页输出。

    protected void Page_Load(object sender, EventArgs e)
    {
        string fileDependencyPath = Server.MapPath("TextFile1.txt");
        Response.AddFileDependency(fileDependencyPath);
    
        // Set additional properties to enable caching.
        Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
        Response.Cache.SetCacheability(HttpCacheability.Public);
        Response.Cache.SetValidUntilExpires(true);
    }
    
    Protected Sub Page_Load(ByVal sender As Object, _
            ByVal e As EventArgs) Handles Me.Load
        Dim fileDependencyPath As String = _
            Server.MapPath("TextFile1.txt")
        Response.AddFileDependency(fileDependencyPath)
    
        ' Set additional properties to enable caching.
        Response.Cache.SetExpires(DateTime.Now.AddSeconds(60))
        Response.Cache.SetCacheability(HttpCacheability.Public)
        Response.Cache.SetValidUntilExpires(True)
    End Sub
    
    67z4z916.alert_note(zh-cn,VS.90).gif说明:

    不能从 ASP.NET 用户控件使用这些方法。但是,在指定 @ OutputCache 指令的任何用户控件中,您都可以创建一个文件依赖项,并将其分配给 Dependency 属性。

使缓存页输出依赖于文件组

  1. 以声明方式或编程方式指定缓存页输出的设置。有关更多信息,请参见如何:设置 ASP.NET 页缓存的过期时间值设置页的可缓存性缓存页的多个版本

  2. 在页代码中,创建一个包含该页所要依赖的文件的路径的 String 数组或 ArrayList

  3. 调用 AddFileDependencies 方法,并将数组作为 filenames 参数传递。

    下面的代码示例创建包含 TextFile1.txt 和 XMLFile1.xml 文件的文件路径的字符串数组,并使页输出依赖于这两个文件。如果修改了其中任何一个文件,将从缓存中移除页输出。

    protected void Page_Load(object sender, EventArgs e)
    {
        string[] fileDependencies;
        string fileDependency1 = Server.MapPath("TextFile1.txt");
        string fileDependency2 = Server.MapPath("XMLFile1.xml");
        fileDependencies = new String[] { fileDependency1, 
            fileDependency2 };
        Response.AddFileDependencies(fileDependencies);
    }
    
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim fileDependencies() As String
        Dim fileDependency1 As String = Server.MapPath("TextFile1.txt")
        Dim fileDependency2 As String = Server.MapPath("XMLFile1.xml")
        fileDependencies = New String() {fileDependency1, _
            fileDependency2}
        Response.AddFileDependencies(fileDependencies)
    End Sub
    

请参见

任务

如何:以编程方式设置页的可缓存性

概念

缓存 ASP.NET 页

设置页的可缓存性