SbeWriteBuffer

StockSharp.Server.Sbe

Помощники для сериализации сообщения SBE в буфер записи для каждого сеанса, который увеличивается при переполнении вместо удаления сообщения и отключения клиента.

Методы

Grow
public static byte[] Grow(byte[] buffer, int minSize)
result = SbeWriteBuffer.Grow(buffer, minSize)

Возвращает буфер длиной не менее байт. Если существующий буфер уже достаточно велик, он возвращается без изменений; в противном случае новый буфер выделяется путем удвоения емкости, пока он не покроет , ограниченный MaxWriteBufferSize.

buffer
Текущий буфер (может быть нулевым).
minSize
Минимально необходимый размер в байтах.

Возвращает: Буфер, длина которого не менее .

IsOverflow
private static bool IsOverflow(Exception ex, int currentSize, int requiredSize)
result = SbeWriteBuffer.IsOverflow(ex, currentSize, requiredSize)

Распознает исключения переполнения диапазона, выдаваемые сериализатором SBE, и вычисляет целевой размер для увеличения. Выделенный SbeBufferTooSmallException предоставляет точный размер; общие переполнения интервала возвращаются к удвоению.

Serialize
public static int Serialize(ClientSbeSession session, Func<SbeRecordSerializer, byte[], int> serialize)
result = SbeWriteBuffer.Serialize(session, serialize)

Сериализует сообщение в буфер записи сеанса, увеличивая буфер и повторяя попытку при переполнении. Возвращает количество записанных байт. Буфер (возможно, перераспределенный) доступен через WriteBuffer.

session
Целевой сеанс, для которого используется буфер записи.
serialize
Делегат сериализации: записывает в буфер, возвращает записанную длину.

Возвращает: Количество байтов, записанных в буфер сеанса.

Поля

InitialWriteBufferSize
public const int InitialWriteBufferSize
value = SbeWriteBuffer.InitialWriteBufferSize

Начальный размер буфера записи сеанса по умолчанию.

MaxWriteBufferSize
public const int MaxWriteBufferSize
value = SbeWriteBuffer.MaxWriteBufferSize

Жесткая верхняя граница для одного кадра SBE. Кадр, который не помещается даже после увеличения до этого размера, рассматривается как настоящая ошибка и создается повторно, а не зацикливается при перераспределении.