ChangeMonitor 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
캐시 항목이 종속된 데이터 상태의 변경 내용을 모니터링하는 파생 사용자 지정 형식에 대한 기본 클래스를 제공합니다.
public ref class ChangeMonitor abstract : IDisposable
public abstract class ChangeMonitor : IDisposable
type ChangeMonitor = class
interface IDisposable
Public MustInherit Class ChangeMonitor
Implements IDisposable
- 상속
-
ChangeMonitor
- 파생
- 구현
설명
클래스 ChangeMonitor 는 특정 캐시 구현에 대해 특수화된 파생 모니터 클래스의 기본 클래스로 사용됩니다. 인스턴스는 ChangeMonitor 캐시 항목이 종속된 데이터 상태의 변경 내용을 모니터링합니다. 예를 들어 항목은 콘텐츠가 캐시되는 파일 또는 데이터 엔터티일 수 있습니다. 파일 또는 데이터 엔터티를 업데이트하는 경우 연결된 캐시 항목도 변경해야 합니다. 모니터링할 수 있는 일반적인 항목에는 데이터 엔터티(예: 데이터베이스 필드, 값, 행 또는 테이블), 다른 캐시 항목, 파일 및 파일 특성이 포함됩니다.
종속성 변경은 종속성 상태의 변경입니다. 일반적인 캐시 구현에서 인스턴스가 캐시에 종속성이 변경되었음을 알린 후 ChangeMonitor 캐시는 삽입된 캐시 항목을 무효화하는 등 필요한 작업을 수행합니다.
ChangeMonitor 파생 클래스는 특정 다른 데이터 저장소에 대한 종속성 변경을 모니터링하도록 사용자 지정할 수 있습니다. 예를 들어 파일 시스템, 실제 메모리 또는 데이터베이스에 대한 캐시 구현이 있습니다. 클래스는 ChangeMonitor 캐시 외부에서 발생하는 변경 내용을 검사한 다음 변경이 발생했음을 캐시에 경고합니다.
.NET Framework에는 ChangeMonitor 클래스에서 파생되는 다음 클래스가 포함됩니다.
이러한 각 클래스는 다양한 유형의 종속성에서 작동합니다. 예를 들어 파생 FileChangeMonitor 클래스는 캐시 항목이 종속된 파일 시스템 데이터(파일 및 폴더)에 대한 캐시 변경 내용을 모니터링합니다.
구현자 참고
사용자 지정 캐시 구현 또는 파생된 변경 모니터 유형을 만드는 경우 특정 지침을 따라야 합니다. 다음 목록에는 이러한 지침이 요약되어 있습니다. 자세한 내용은 개별 메서드 또는 속성에 대한 설명서를 참조하세요.
파생 클래스의 생성자는 메서드가 UniqueId 반환되기 전에 속성을 설정하고, 모니터링을 시작하고, 메서드를 호출 InitializationComplete() 해야 합니다. 생성자가 생성 중에 오류가 발생하고 리소스를 삭제해야 하는 경우 초기화가 완료되지 않은 경우 오버로드가 예외를 throw InvalidOperationException 하기 때문에 Dispose 메서드가 호출된 후에 InitializationComplete() 만 생성자가 오버로드를 호출 Dispose 할 수 있습니다.
초기화가 완료되기 전에 모니터링되는 데이터에서 변경 내용이 발생하는 경우 생성자는 메서드를 OnChanged(Object) 호출하기 전에 메서드를 InitializationComplete() 호출해야 합니다.
파생 형식이 인스턴스화되면 ChangeMonitor 사용자 지정 ObjectCache 구현에 모니터를 삽입해야 합니다. 또는 변경 모니터 사용을 완료한 경우 메서드를 호출합니다 Dispose .
인스턴스를 ChangeMonitor 구현 ObjectCache 에 ObjectCache 삽입한 후에는 변경 모니터를 삭제해야 합니다. 삽입이 유효하지 않으며 예외가 발생하더라도 구현은 ObjectCache 오버로드를 Dispose 호출해야 합니다.
파생 변경 모니터를 캐시에 삽입한 후에는 개체를 ObjectCache 전달 OnChangedCallback 하여 구현에서 호출NotifyOnChanged(OnChangedCallback)해야 합니다. 메서드는 NotifyOnChanged(OnChangedCallback) 한 번만 호출할 수 있습니다. 종속성 변경이 이미 발생한 경우 인스턴스가 OnChangedCallback 호출될 때 NotifyOnChanged(OnChangedCallback) 즉시 호출됩니다. 그렇지 않으면 인스턴스가 OnChangedCallback 한 번만 호출됩니다. 이 한 번 호출은 인스턴스가 변경 사항을 감지했기 때문에 ChangeMonitor 메서드가 호출될 때 OnChanged(Object) 또는 메서드가 호출ChangeMonitor될 때Dispose()(둘 중 먼저 발생하는 경우) 발생합니다.
구현에서 ObjectCache 제공하는 인스턴스는 OnChangedCallback 연결된 캐시 항목을 제거하고 열거형을 사용하여 DependencyChanged 이유를 지정해야 합니다.
인스턴스는 ChangeMonitor 캐시 구현이 메서드를 OnChanged(Object) 호출하기 전이나 이후에 메서드를 호출 NotifyOnChanged(OnChangedCallback) 할 수 있습니다. 메서드가 OnChanged(Object) 호출되기 전에 NotifyOnChanged(OnChangedCallback) 호출되는 경우 기본 ChangeMonitor 구현은 이 문제가 발생했음을 캐시에 알리고 호출될 때 NotifyOnChanged(OnChangedCallback) 즉시 전달되도록 콜백을 NotifyOnChanged(OnChangedCallback) 트리거합니다. 메서드에 OnChanged(Object) 전달되는 모든 상태 데이터는 변경 모니터에 의해 저장되고 이후에 메서드가 NotifyOnChanged(OnChangedCallback) 호출될 때 메서드에 NotifyOnChanged(OnChangedCallback) 전달됩니다.
변경 모니터는 메서드를 Dispose(Boolean) 구현해야 합니다. 자세한 내용은 메서드 설명서를 참조 Dispose(Boolean) 하세요.
인스턴스를 Dispose() 삭제하려면 메서드 오버로드를 ChangeMonitor 호출해야 합니다. Dispose를 호출하는 규칙은 다음과 같습니다.
항목이 캐시에 삽입되기 전에 호출자가 인스턴스를 삭제 ChangeMonitor 해야 합니다.
캐시 항목과 ChangeMonitor 연결된 인스턴스가 캐시에 전달되면 캐시 구현자는 삽입이 실패하더라도 메서드가 Dispose 호출되는지 확인해야 합니다.
항목과 연결된 ChangeMonitor 인스턴스가 캐시에 전달된 후 호출자는 메서드가 호출될 때 Dispose 종속성이 변경된 것처럼 처리되므로 종속성을 삭제해서는 안 됩니다. 결과적으로 메서드가 OnChanged(Object) 자동으로 호출됩니다.
이러한 규칙을 고려 Dispose 하면 다음 방법 중 하나로 메서드를 호출해야 합니다.
파생된 변경 모니터 인스턴스를 캐시에 Dispose() 삽입하지 않기로 결정한 경우 사용자는 메서드 오버로드를 호출해야 합니다.
구현에서 개체 캐시에 변경 모니터 인스턴스를 삽입하려고 하지만 삽입이 실패하는 경우 캐시 구현은 오버로드를 호출합니다 Dispose() . 삽입 시도가 예외를 발생시키는 경우 캐시 구현은 연결된 종속성을 삭제해야 합니다.
캐시 항목이 제거되면 캐시 구현도 종속성을 삭제해야 합니다.
메서드의 OnChanged(Object) 내부 구현을 통해 NotifyOnChanged(OnChangedCallback)등록 된 콜백을 Dispose 호출 한 후 메서드를 자동으로 호출 합니다.
참고: 이벤트 발생 중에 dispose 메서드에 대한 이 자동 호출은 인스턴스의 ChangeMonitor 초기화가 이전에 완료된 경우에만 발생합니다.
파생된 변경 모니터의 생성자가 메서드를 호출 InitializationComplete() 할 때 변경 모니터의 상태가 이미 변경된 경우(즉, 생성자가 여전히 활성 상태일 때 이미 변경된 상태) InitializationComplete() 메서드는 변경 모니터를 자동으로 삭제합니다.
- 개체 HasChanged 가 메서드 호출에
true의해 설정되었는지 여부에 OnChangedCallback 관계없이 파생된 변경 모니터 인스턴스에서 메서드를 호출한 후 OnChanged(Object) 속성이 NotifyOnChanged(OnChangedCallback) 설정됩니다.
생성자
| Name | Description |
|---|---|
| ChangeMonitor() |
ChangeMonitor 클래스의 새 인스턴스를 초기화합니다. 이 생성자는 파생 클래스의 생성자에서 호출되어 기본 클래스를 초기화합니다. |
속성
| Name | Description |
|---|---|
| HasChanged |
클래스에서 모니터링하는 상태가 변경되었음을 ChangeMonitor 나타내는 값을 가져옵니다. |
| IsDisposed |
클래스의 ChangeMonitor 파생 인스턴스가 삭제되었음을 나타내는 값을 가져옵니다. |
| UniqueId |
클래스 인스턴스를 ChangeMonitor 나타내는 값을 가져옵니다. |
메서드
| Name | Description |
|---|---|
| Dispose() |
클래스의 현재 인스턴스에서 사용하는 모든 리소스를 해제합니다 ChangeMonitor . |
| Dispose(Boolean) |
관리되는 리소스와 관리되지 않는 모든 리소스 및 인스턴스에 대한 참조를 ChangeMonitor 모두 해제합니다. 이 오버로드는 파생된 변경 모니터 클래스에 의해 구현되어야 합니다. |
| Equals(Object) |
지정한 개체와 현재 개체가 같은지 여부를 확인합니다. (다음에서 상속됨 Object) |
| GetHashCode() |
기본 해시 함수로 작동합니다. (다음에서 상속됨 Object) |
| GetType() |
현재 인스턴스의 Type 가져옵니다. (다음에서 상속됨 Object) |
| InitializationComplete() |
초기화가 완료되었음을 나타내기 위해 파생 클래스의 생성자에서 호출됩니다. |
| MemberwiseClone() |
현재 Object단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
| NotifyOnChanged(OnChangedCallback) |
캐시 구현자가 콜백을 등록하고 종속성이 변경되면 대리자를 통해 ObjectCache 인스턴스에 알리기 OnChangedCallback 위해 호출됩니다. |
| OnChanged(Object) |
종속성이 변경될 때 이벤트를 발생하도록 파생 클래스에서 호출됩니다. |
| ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
적용 대상
스레드 보안
이 형식은 스레드로부터 안전합니다.