SbeWriteBuffer
Helfer zum Serialisieren einer SBE-Nachricht in einen Schreibpuffer pro Sitzung, der beim Überlaufen wächst, anstatt die Nachricht fallen zu lassen und den Client zu trennen.
Methoden
public static byte[] Grow(byte[] buffer, int minSize)
result = SbeWriteBuffer.Grow(buffer, minSize)
Gibt einen Puffer von mindestens Bytes Länge zurück. Wenn der vorhandene Puffer bereits groß genug ist, wird er unverändert zurückgegeben; andernfalls wird ein neuer Puffer durch Verdoppelung der Kapazität zugewiesen, bis er abgedeckt ist, begrenzt auf MaxWriteBufferSize.
- buffer
- Aktueller Puffer (kann null sein).
- minSize
- Mindestanforderungen an die Größe in Bytes.
Rückgabe: Ein Puffer, dessen Länge mindestens ist.
private static bool IsOverflow(Exception ex, int currentSize, int requiredSize)
result = SbeWriteBuffer.IsOverflow(ex, currentSize, requiredSize)
Erkennt die Span-Overflow-Ausnahmen, die vom SBE-Serialisierer ausgelöst werden, und berechnet eine Zielgröße, zu der man wachsen kann. Ein dediziertes SbeBufferTooSmallException liefert eine genaue Größe; generische Span-Overflows fallen auf die Verdopplung zurück.
public static int Serialize(ClientSbeSession session, Func<SbeRecordSerializer, byte[], int> serialize)
result = SbeWriteBuffer.Serialize(session, serialize)
Serialisiert eine Nachricht in den Session-Schreibpuffer, vergrößert den Puffer und versucht erneut, wenn Überlauf ist, gibt die Anzahl der geschriebenen Bytes zurück. Der (möglicherweise neu zugewiesene) Puffer ist verfügbar unter WriteBuffer.
- session
- Zielsitzung, deren Schreibpuffer verwendet wird.
- serialize
- Serialize Delegate: Schreibt in den Puffer, gibt die geschriebene Länge zurück.
Rückgabe: Anzahl der in den Session-Buffer geschriebenen Bytes.
Felder
public const int InitialWriteBufferSize
value = SbeWriteBuffer.InitialWriteBufferSize
Standardmäßige Anfangsgröße eines Session Write Buffers.
public const int MaxWriteBufferSize
value = SbeWriteBuffer.MaxWriteBufferSize
Harte Obergrenze für einen einzelnen SBE-Rahmen: Ein Rahmen, der auch nach dem Wachstum auf diese Größe nicht passt, wird als echter Fehler behandelt und neu geworfen, anstatt bei der Neuzuweisung für immer einen Schleifenlauf zu durchlaufen.