HostFileChangeMonitor 类

定义

监视目录和文件路径,并通知缓存被监视项的更改情况。 此类不能被继承。

public ref class HostFileChangeMonitor sealed : System::Runtime::Caching::FileChangeMonitor
public sealed class HostFileChangeMonitor : System.Runtime.Caching.FileChangeMonitor
type HostFileChangeMonitor = class
    inherit FileChangeMonitor
Public NotInheritable Class HostFileChangeMonitor
Inherits FileChangeMonitor
继承
HostFileChangeMonitor

示例

以下示例创建一个 HostFileChangeMonitor 缓存项,该缓存项使用 对象监视源数据 (这是文件系统上) 的文件的状态。 缓存条目是使用 对象定义的, CacheItemPolicy 以便为缓存项提供逐出和过期详细信息。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Runtime.Caching;
using System.IO;

public partial class _Default : System.Web.UI.Page
{

    protected void Button1_Click1(object sender, EventArgs e)
    {
        ObjectCache cache = MemoryCache.Default;
        string fileContents = cache["filecontents"] as string;

        if (fileContents == null)
        {
            CacheItemPolicy policy = new CacheItemPolicy();
            policy.AbsoluteExpiration =
                DateTimeOffset.Now.AddSeconds(10.0);

            List<string> filePaths = new List<string>();
            string cachedFilePath = Server.MapPath("~") +
                "\\cacheText.txt";

            filePaths.Add(cachedFilePath);

            policy.ChangeMonitors.Add(new
                HostFileChangeMonitor(filePaths));

            // Fetch the file contents.
            fileContents = File.ReadAllText(cachedFilePath) + "\n"
                + DateTime.Now.ToString();

            cache.Set("filecontents", fileContents, policy);
        }

        Label1.Text = fileContents;
    }
}
Imports System.Runtime.Caching
Imports System.IO

Partial Class _Default
    Inherits System.Web.UI.Page

    Protected Sub Button1_Click(ByVal sender As Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
        Dim cache As ObjectCache = MemoryCache.Default
        Dim fileContents As String = TryCast(cache("filecontents"), _
            String)
        If fileContents Is Nothing Then
            Dim policy As New CacheItemPolicy()
            policy.AbsoluteExpiration = _
                DateTimeOffset.Now.AddSeconds(10.0)
            Dim filePaths As New List(Of String)()
            Dim cachedFilePath As String = Server.MapPath("~") & _
                "\cacheText.txt"
            filePaths.Add(cachedFilePath)
            policy.ChangeMonitors.Add(New  _
                HostFileChangeMonitor(filePaths))

            ' Fetch the file contents.
            fileContents = File.ReadAllText(cachedFilePath) & _
                vbCrLf & DateTime.Now.ToString()
            cache.Set("filecontents", fileContents, policy)
        End If
        Label1.Text = fileContents
    End Sub

End Class

注解

HostFileChangeMonitor 是 类型的具体实现 FileChangeMonitor 。 此类是密封的,因此无法扩展。 如果要使用现有缓存实现并监视文件和目录的更改,此类非常有用。

对于每个指定的文件或目录路径,如果发生以下任何更改, HostFileChangeMonitor 类都会触发更改通知:

  • 受监视文件或目录的名称更改。

  • 指定的文件或目录在创建监视器时不存在,但稍后创建。 换句话说,在受监视项的范围内创建了文件或目录。

  • 受监视文件的大小已更改。

  • 受监视文件的内容已更改,或受监视目录的内容已更改。

  • (文件或目录的 ACL) 访问控制列表已更改。

  • 已删除受监视的文件或目录。

如果同时对受监视的文件或目录发生过多的更改,则 HostFileChangeMonitor 实例可能会失去对特定更改的跟踪。 在此方案中, HostFileChangeMonitor 类会触发更改通知。 当实例监视目录,并且目录结构范围内在短时间内发生许多更改时 HostFileChangeMonitor ,这种情况更有可能发生。

由于 类的目的 HostFileChangeMonitor 只是表明在受监视文件和目录集中发生了更改,因此不捕获有关特定更改的详细信息并不重要。 类的目的是 HostFileChangeMonitor 提供状态已更改的通知,以便可以逐出缓存项 (或) 项。 HostFileChangeMonitor由于 类不确切指示更改的内容,因此内部更改跟踪溢出无关紧要。

为实例提供路径 HostFileChangeMonitor 时,目录和文件路径必须是目录或文件的完整路径。 不允许路径中的相对路径和通配符。

HostFileChangeMonitor在 ASP.NET 应用程序中使用 类时,用于访问受监视项的 Windows 标识是 ASP.NET 应用程序的应用程序标识。 换句话说,应用程序标识将是以下项之一:

  • 进程标识。

  • 配置的应用程序标识。

  • 如果应用程序从 UNC 共享运行,则为 UNC 凭据。

HostFileChangeMonitor non-ASP.NET 应用程序中使用 类时,类 FileSystemWatcher 在内部用于监视文件。 因此, (ACL) 应用于受监视文件或目录的任何访问控制列表都会应用于当前线程的 Windows 标识。

注意

调用方必须具有适当级别的代码访问安全性 (CAS) 权限,并且必须对所有受监视的目录和路径具有 NTFS 权限。

构造函数

HostFileChangeMonitor(IList<String>)

初始化 HostFileChangeMonitor 类的新实例。

属性

FilePaths

获取已传递给 HostFileChangeMonitor(IList<String>) 构造函数的目录和文件路径的集合。

HasChanged

获取一个值,该值指示由 ChangeMonitor 类监视的状态已发生更改。

(继承自 ChangeMonitor)
IsDisposed

获取一个值,该值指示释放 ChangeMonitor 类的派生实例。

(继承自 ChangeMonitor)
LastModified

获取一个只读值,该值指示所监视文件或路径的上次写入时间。

UniqueId

获取基于被监视的目录和文件路径集的 HostFileChangeMonitor 实例的标识符。

方法

Dispose()

释放由 ChangeMonitor 类的当前实例占用的所有资源。

(继承自 ChangeMonitor)
Dispose(Boolean)

释放所有托管资源和非托管资源,以及对 ChangeMonitor 实例的任何引用。 此重载必须由派生的更改监视器类实现。

(继承自 ChangeMonitor)
Equals(Object)

确定指定对象是否等于当前对象。

(继承自 Object)
GetHashCode()

作为默认哈希函数。

(继承自 Object)
GetType()

获取当前实例的 Type

(继承自 Object)
InitializationComplete()

从派生类的构造函数进行调用以指示初始化已完成。

(继承自 ChangeMonitor)
MemberwiseClone()

创建当前 Object 的浅表副本。

(继承自 Object)
NotifyOnChanged(OnChangedCallback)

由缓存实施者调用来注册回调,并在某个依赖项已更改时通过 ObjectCache 委托通知 OnChangedCallback 实例。

(继承自 ChangeMonitor)
OnChanged(Object)

由派生类调用以在某个依赖项发生更改时引发事件。

(继承自 ChangeMonitor)
ToString()

返回表示当前对象的字符串。

(继承自 Object)

适用于