Buffer en profundidad
Ciclo de escritura, lectura, reciclado y uso seguro de Buffer.
Buffer en profundidad
Buffer combina un MemoryStream, BinaryWriter y BinaryReader para representar un bloque binario que puede cambiar entre modo escritura y lectura. Eco lo utiliza como una de las piezas centrales del protocolo. fileciteturn228file0
Ciclo de vida
Buffer.Create()
↓
BeginWriting()
↓
writer.Write(...)
↓
EndWriting()
↓
BeginReading()
↓
reader.Read(...)
↓
Recycle()No conviene mantener referencias a un buffer después de devolverlo al pool.
Escritura
Buffer buffer = Buffer.Create();
var writer = buffer.BeginWriting();
writer.Write(42);
writer.Write("Eco");
buffer.EndWriting();EndWriting() fija el tamaño escrito y devuelve la posición de lectura al inicio.
Lectura
var reader = buffer.BeginReading();
int id = reader.ReadInt32();
string nombre = reader.ReadString();La secuencia de lectura debe coincidir exactamente con la secuencia de escritura.
Reciclado
Eco puede compilar Buffer con reciclado habilitado. En ese modo Recycle() limpia el buffer y lo devuelve a un pool reutilizable; el código incluye además contadores y mecanismos de diagnóstico para detectar usos incorrectos. fileciteturn228file0
El pool tiene un límite y también existe ReleaseUnusedMemory() para liberar la memoria retenida por buffers que ya no se utilizan.
Thread safety
Recycle(bool threadSafe = true) permite proteger el acceso al pool cuando el buffer se libera desde diferentes hilos. No significa que todas las operaciones del buffer sean automáticamente seguras para acceso concurrente.
Rendimiento
La reutilización evita asignaciones repetidas de MemoryStream y estructuras asociadas, pero no debe utilizarse como excusa para mantener buffers enormes vivos indefinidamente. Clear() puede conservar o reemplazar el stream dependiendo de su capacidad. fileciteturn228file0
Reglas prácticas
- El productor conoce cuándo ha terminado de escribir.
- El consumidor no debe cambiar el contenido durante la lectura.
- El buffer se recicla sólo cuando todos sus consumidores han terminado.
- El protocolo debe escribir y leer en el mismo orden y con los mismos tipos.
Referencias
Paquetes y protocolo
Cómo encaja Buffer dentro del protocolo.
Serialización
Tipos de datos y conversiones utilizadas por Eco.
