SocketAsyncEventArgs.SetBuffer Método

Definición

Inicializa el búfer de datos que se va a usar con un método de socket asincrónico.

Sobrecargas

SetBuffer(Memory<Byte>)

Establece la región de memoria que se va a usar como búfer con un método de socket asincrónico.

SetBuffer(Int32, Int32)

Establece el búfer de datos que se va a usar con un método de socket asincrónico.

SetBuffer(Byte[], Int32, Int32)

Establece el búfer de datos que se va a usar con un método de socket asincrónico.

Comentarios

Este método establece la Buffer propiedad en null y las Count propiedades y Offset en cero.

SetBuffer(Memory<Byte>)

Establece la región de memoria que se va a usar como búfer con un método de socket asincrónico.

public:
 void SetBuffer(Memory<System::Byte> buffer);
public void SetBuffer (Memory<byte> buffer);
member this.SetBuffer : Memory<byte> -> unit
Public Sub SetBuffer (buffer As Memory(Of Byte))

Parámetros

buffer
Memory<Byte>

Región de memoria que se va a usar como búfer con un método de socket asincrónico.

Comentarios

Este método establece la MemoryBuffer propiedad en el buffer parámetro , la Count propiedad en la buffer longitud y la Offset propiedad en cero.

Se aplica a

SetBuffer(Int32, Int32)

Establece el búfer de datos que se va a usar con un método de socket asincrónico.

public:
 void SetBuffer(int offset, int count);
public void SetBuffer (int offset, int count);
member this.SetBuffer : int * int -> unit
Public Sub SetBuffer (offset As Integer, count As Integer)

Parámetros

offset
Int32

Desplazamiento, en bytes, en el búfer de datos donde se inicia la operación.

count
Int32

Cantidad máxima de datos, en bytes, que se van a enviar o recibir en el búfer.

Excepciones

Un argumento estaba fuera de intervalo. Esta excepción se produce si el parámetro offset es menor que cero o mayor que la longitud de la matriz en la propiedad Buffer. Esta excepción también se produce si el parámetro count es menor que cero o mayor que la longitud de la matriz en la propiedad Buffer menos el parámetro offset.

Comentarios

Los offset parámetros y count no pueden ser números negativos. La combinación de los offset parámetros y count debe estar en los límites de la matriz de búferes de la Buffer propiedad .

Este método establece la Count propiedad en el count parámetro y la Offset propiedad en el offset parámetro . Si la Buffer propiedad es null, este método omite los offset parámetros y count y establece las Offset propiedades y Count en 0.

Este método no cambia la Buffer propiedad .

Consulte también

Se aplica a

SetBuffer(Byte[], Int32, Int32)

Establece el búfer de datos que se va a usar con un método de socket asincrónico.

public:
 void SetBuffer(cli::array <System::Byte> ^ buffer, int offset, int count);
public void SetBuffer (byte[] buffer, int offset, int count);
public void SetBuffer (byte[]? buffer, int offset, int count);
member this.SetBuffer : byte[] * int * int -> unit
Public Sub SetBuffer (buffer As Byte(), offset As Integer, count As Integer)

Parámetros

buffer
Byte[]

Búfer de datos que se va a usar con un método de socket asincrónico.

offset
Int32

Desplazamiento, en bytes, en el búfer de datos donde se inicia la operación.

count
Int32

Cantidad máxima de datos, en bytes, que se van a enviar o recibir en el búfer.

Excepciones

Se especificaron búferes ambiguos. Esta excepción se produce si las propiedades Buffer y BufferList tampoco son null.

Un argumento estaba fuera de intervalo. Esta excepción se produce si el parámetro offset es menor que cero o mayor que la longitud de la matriz en la propiedad Buffer. Esta excepción también se produce si el parámetro count es menor que cero o mayor que la longitud de la matriz en la propiedad Buffer menos el parámetro offset.

Ejemplos

En el ejemplo de código siguiente se crea un único búfer grande que se puede dividir y asignar a SocketAsyncEventArgs objetos para su uso con cada operación de E/S de socket. Esto permite que los búferes se vuelvan a usar fácilmente y protejan contra la memoria del montón de fragmentación.

// This class creates a single large buffer which can be divided up
// and assigned to SocketAsyncEventArgs objects for use with each
// socket I/O operation.
// This enables bufffers to be easily reused and guards against
// fragmenting heap memory.
//
// The operations exposed on the BufferManager class are not thread safe.
class BufferManager
{
    int m_numBytes;                 // the total number of bytes controlled by the buffer pool
    byte[] m_buffer;                // the underlying byte array maintained by the Buffer Manager
    Stack<int> m_freeIndexPool;     //
    int m_currentIndex;
    int m_bufferSize;

    public BufferManager(int totalBytes, int bufferSize)
    {
        m_numBytes = totalBytes;
        m_currentIndex = 0;
        m_bufferSize = bufferSize;
        m_freeIndexPool = new Stack<int>();
    }

    // Allocates buffer space used by the buffer pool
    public void InitBuffer()
    {
        // create one big large buffer and divide that
        // out to each SocketAsyncEventArg object
        m_buffer = new byte[m_numBytes];
    }

    // Assigns a buffer from the buffer pool to the
    // specified SocketAsyncEventArgs object
    //
    // <returns>true if the buffer was successfully set, else false</returns>
    public bool SetBuffer(SocketAsyncEventArgs args)
    {

        if (m_freeIndexPool.Count > 0)
        {
            args.SetBuffer(m_buffer, m_freeIndexPool.Pop(), m_bufferSize);
        }
        else
        {
            if ((m_numBytes - m_bufferSize) < m_currentIndex)
            {
                return false;
            }
            args.SetBuffer(m_buffer, m_currentIndex, m_bufferSize);
            m_currentIndex += m_bufferSize;
        }
        return true;
    }

    // Removes the buffer from a SocketAsyncEventArg object.
    // This frees the buffer back to the buffer pool
    public void FreeBuffer(SocketAsyncEventArgs args)
    {
        m_freeIndexPool.Push(args.Offset);
        args.SetBuffer(null, 0, 0);
    }
}

Comentarios

Los offset parámetros y count no pueden ser números negativos. La combinación de los offset parámetros y count debe estar en los límites de la matriz de datos en el buffer parámetro .

Este método establece la Buffer propiedad en el buffer parámetro , la Count propiedad en el count parámetro y la Offset propiedad en el offset parámetro .

Consulte también

Se aplica a