如何:使用文件依赖项缓存页输出
更新:2007 年 11 月
有时候,您可能需要在文件发生更改时从输出缓存中移除某一页。例如,您可能有这样一页:该页从生成 XML 文件作为输出且占用大量进程的报告中获取其内容。仅当 XML 文件发生更改时,才需要重新处理该页。要将重新处理限制为仅在需要的时候进行,可以使页的缓存策略依赖于单个文件。如有必要,可以使缓存页依赖于多个文件。
![]() |
---|
通过调用 RemoveOutputCacheItem 方法,可显式移除输出缓存中的任何页。可以从 Global.asax 文件、自定义 ASP.NET 服务器控件或页中执行此操作,具体取决于应用程序的需要。 |
使缓存页输出依赖于一个文件
以声明方式或编程方式指定缓存页输出的设置。有关更多信息,请参见如何:设置 ASP.NET 页缓存的过期时间值、设置页的可缓存性和缓存页的多个版本。
在页代码中调用 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
说明:
不能从 ASP.NET 用户控件使用这些方法。但是,在指定 @ OutputCache 指令的任何用户控件中,您都可以创建一个文件依赖项,并将其分配给 Dependency 属性。
使缓存页输出依赖于文件组
以声明方式或编程方式指定缓存页输出的设置。有关更多信息,请参见如何:设置 ASP.NET 页缓存的过期时间值、设置页的可缓存性和缓存页的多个版本。
调用 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