Compartir por


SocketAsyncEventArgs.SetBuffer Método

Definición

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

Sobrecargas

Nombre Description
SetBuffer(Memory<Byte>)

Establece la región de la 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>)

Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs

Establece la región de la 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)

Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs

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, para enviar o recibir en el búfer.

Excepciones

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

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úfer en 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 establece las Offset propiedades y en Count 0.

Este método no cambia la Buffer propiedad .

Consulte también

Se aplica a

SetBuffer(Byte[], Int32, Int32)

Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs

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, para enviar o recibir en el búfer.

Excepciones

Hay búferes ambiguos especificados. Esta excepción se produce si la Buffer propiedad tampoco es null y la BufferList propiedad tampoco es null.

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

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 reutilizar fácilmente los búferes y protegerse contra la memoria del montón fragmentado.

// 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 dentro de 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