ChangeMonitor.Dispose 方法

定义

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

重载

Dispose()

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

Dispose(Boolean)

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

注解

Dispose方法用于释放 实例 ChangeMonitor 和相关资源。 调用 public 方法以将处置过程与派生变更监视器类的关键生命周期事件协调 (例如初始化) ,并释放 实例,以便对实例进行 Dispose ChangeMonitor 垃圾回收。 Dispose方法由派生变更监视器类实现,以释放其托管资源以及非托管资源。

Dispose()

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

public:
 virtual void Dispose();
public void Dispose ();
abstract member Dispose : unit -> unit
override this.Dispose : unit -> unit
Public Sub Dispose ()

实现

例外

在调用 Dispose() 基方法的派生更改监视器类中,初始化未完成。

注解

Dispose方法仅在第一次 Dispose 调用派生类时调用该方法一次。 对 方法的后续 Dispose 调用不起作用。 调用 方法后, IsDisposed 属性将设置为 true

Dispose必须调用 重载以释放 ChangeMonitor 实例。 下面是调用 dispose 方法的规则:

  • 在将项插入到缓存中之前,调用方负责释放 ChangeMonitor 实例。

  • 缓存项及其关联的实例传递到缓存后,即使插入失败,也必须确保调用 的缓存 ChangeMonitor Dispose 实现者。

  • 将项及其关联的实例传递到缓存后,调用方不得释放依赖项,因为在调用 方法时,调用将被视为依赖项 ChangeMonitor Dispose 已更改。 因此,会自动调用 OnChanged 方法。

  • 考虑到这些规则, Dispose 必须采用以下方法之一调用 方法:

    • 如果用户决定不将派生更改监视器实例插入缓存中,则必须调用 Dispose 方法重载。

    • 如果实现尝试将 change-monitor 实例插入对象缓存,但插入失败,则缓存实现 Dispose 负责调用重载。 当插入尝试导致异常时,缓存实现必须释放任何关联的依赖项。

    • 如果删除缓存项,则缓存实现还必须释放依赖项。

方法的内部实现在调用通过 方法注册的回调后 OnChanged Dispose 自动调用 NotifyOnChanged 方法。

备注

仅在实例的初始化之前完成时,才在事件触发期间 ChangeMonitor 进行此自动释放。

当派生更改监视器的构造函数调用 方法时,如果更改监视器的状态已更改 (即,当构造函数仍处于活动状态时,受监视的状态已更改) 则 方法将自动释放更改监视器。 InitializationComplete InitializationComplete

备注

用户不应调用 Dispose 方法。 但是,不能阻止用户调用 方法。 因此,如果这样做, OnChanged 将调用 方法。 在这种情况下,缓存项会收到通知,就像依赖项已更改一样。

为了防止派生类重写 Dispose 方法,该方法不是显式接口实现。

另请参阅

适用于

Dispose(Boolean)

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

protected:
 abstract void Dispose(bool disposing);
protected abstract void Dispose (bool disposing);
abstract member Dispose : bool -> unit
Protected MustOverride Sub Dispose (disposing As Boolean)

参数

disposing
Boolean

若要释放托管资源和非托管资源,以及对 ChangeMonitor 实例的任何引用,则为 true;若要仅释放非托管资源,则为 false。 传递 false 时,Dispose(Boolean) 方法由 finalizer 线程调用,所有外部托管引用由于已经作为垃圾回收,因此可能不再有效。

注解

值为 时,将释放所有托管资源以及非托管资源,并释放对此对象的任何引用,以便对派生 disposing true 更改监视器实例进行垃圾回收。 保证基方法仅 Dispose 调用实现的方法 Dispose 一次。

实施者说明

当 的值为 时,更改监视器必须实现 重载以释放所有托管资源 Dispose(Boolean) 以及非 disposing 托管资源 true 。 值为 的方法重载仅调用一次,即首次释放实例 Dispose(Boolean) disposing true 时。 更改监视器不得直接调用 Dispose(Boolean) 重载。 派生更改监视器可以在基类上调用公共 Dispose() 无参数 ChangeMonitor 方法。

或者,更改监视器可以实现终结器方法。 在这种情况下,终结器可以调用 方法 Dispose(Boolean) ,并传递 disposingfalse 。 但是,这通常是不必要的。 监视依赖项更改通常由维护对更改监视器实例的引用的服务执行。 引用可防止实例被垃圾回收,因此不需要终结器方法。 为了避免内存泄漏,当依赖项发生更改时,方法将释放更改监视器实例 (,除非初始化尚未完成 OnChanged(Object)) 。

适用于