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 方法設定新的基序號相同,不同之處在於不會將重新啟動記錄寫入日誌。