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
对此序列无效。
活动日志新存档或现有存档的尾数据或基数据无效。
- 或 -
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 方法设置新的基序列号相同,只是没有将重新开始记录写入日志中。