LogRecordSequence.AdvanceBaseSequenceNumber(SequenceNumber) 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將記錄檔的基底序號往前移動。 這個方法無法被繼承。
public:
virtual void AdvanceBaseSequenceNumber(System::IO::Log::SequenceNumber newBaseSequenceNumber);
public void AdvanceBaseSequenceNumber (System.IO.Log.SequenceNumber newBaseSequenceNumber);
abstract member AdvanceBaseSequenceNumber : System.IO.Log.SequenceNumber -> unit
override this.AdvanceBaseSequenceNumber : System.IO.Log.SequenceNumber -> unit
Public Sub AdvanceBaseSequenceNumber (newBaseSequenceNumber As SequenceNumber)
參數
- newBaseSequenceNumber
- SequenceNumber
指定記錄的新基底 SequenceNumber。 必須介於記錄的目前基底序號和最後一個序號之間。
實作
例外狀況
newBaseSequenceNumber
對此順序無效。
指定的記錄沒有任何延伸區。 必須先建立一或多個延伸區,才能使用記錄順序。
已在處置序列之後呼叫此方法。
沒有足夠的記憶體可以繼續執行程式。
存取指定的記錄順序遭作業系統拒絕。
記錄順序已滿。
範例
這個範例將示範如何使用 AdvanceBaseSequenceNumber 方法搭配 TailPinned 事件來釋放記錄順序中的空間。
recordSequence.RetryAppend = true;
recordSequence.TailPinned += new EventHandler<TailPinnedEventArgs>(HandleTailPinned);
void HandleTailPinned(object sender, TailPinnedEventArgs tailPinnedEventArgs)
{
// tailPinnedEventArgs.TargetSequenceNumber is the target
// sequence number to free up space to.
// However, this sequence number is not necessarily valid. We have
// to use this sequence number as a starting point for finding a
// valid point within the log to advance toward. You need to
// identify a record with a sequence number equal to, or greater
// than TargetSequenceNumber; let's call this
// realTargetSequenceNumber. Once found, move the base
recordSequence.AdvanceBaseSequenceNumber(realTargetSequenceNumber);
}
備註
這個方法通常與 TailPinned 事件搭配使用,以釋放記錄中的空間。 TailPinned 事件表示,必須將順序的結尾 (即基底序號) 往前移動才能釋放空間。 使用 WriteRestartArea 方法寫入重新啟動區域,或是截斷記錄並使用 AdvanceBaseSequenceNumber 方法將記錄基底序號依照 newBaseSequenceNumber
參數所指定的往前移一個號碼,都可以達到釋放空間的目的。 <範例>一節中,程式碼範例會示範其第二種處理方式。
請注意,呼叫這個方法與使用 WriteRestartArea 方法設定新基底序號的效果一樣,都不會在記錄中寫入重新啟動記錄。