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 该方法设置新的基序列号相同,只不过不会将重启记录写入日志。