Partilhar via


SocketAsyncEventArgs.SetBuffer Método

Definição

Inicializa o buffer de dados a ser usado com um método de soquete assíncrono.

Sobrecargas

Nome Description
SetBuffer(Memory<Byte>)

Define a região da memória a ser usada como um buffer com um método de soquete assíncrono.

SetBuffer(Int32, Int32)

Define o buffer de dados a ser usado com um método de soquete assíncrono.

SetBuffer(Byte[], Int32, Int32)

Define o buffer de dados a ser usado com um método de soquete assíncrono.

Comentários

Esse método define a Buffer propriedade como nula e as Count propriedades e Offset as propriedades como zero.

SetBuffer(Memory<Byte>)

Origem:
SocketAsyncEventArgs.cs
Origem:
SocketAsyncEventArgs.cs
Origem:
SocketAsyncEventArgs.cs
Origem:
SocketAsyncEventArgs.cs
Origem:
SocketAsyncEventArgs.cs

Define a região da memória a ser usada como um buffer com um método de soquete assíncrono.

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>

A região da memória a ser usada como um buffer com um método de soquete assíncrono.

Comentários

Esse método define a MemoryBuffer propriedade como o buffer parâmetro, a Count propriedade para o buffer comprimento e a Offset propriedade como zero.

Aplica-se a

SetBuffer(Int32, Int32)

Origem:
SocketAsyncEventArgs.cs
Origem:
SocketAsyncEventArgs.cs
Origem:
SocketAsyncEventArgs.cs
Origem:
SocketAsyncEventArgs.cs
Origem:
SocketAsyncEventArgs.cs

Define o buffer de dados a ser usado com um método de soquete assíncrono.

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

O deslocamento, em bytes, no buffer de dados em que a operação é iniciada.

count
Int32

A quantidade máxima de dados, em bytes, para enviar ou receber no buffer.

Exceções

Um argumento estava fora do intervalo. Essa exceção ocorrerá se o offset parâmetro for menor que zero ou maior que o comprimento da matriz na Buffer propriedade. Essa exceção também ocorrerá se o count parâmetro for menor que zero ou maior que o comprimento da matriz na Buffer propriedade menos o offset parâmetro.

Comentários

O offset parâmetro e count os parâmetros não podem ser números negativos. A combinação entre os parâmetros e count os offset parâmetros deve estar nos limites da matriz de buffer na Buffer propriedade.

Esse método define a Count propriedade como o count parâmetro e a Offset propriedade para o offset parâmetro. Se a Buffer propriedade for nula, esse método ignorará os offset parâmetros e count definirá as propriedades e Count as Offset propriedades como 0.

Esse método não altera a Buffer propriedade.

Confira também

Aplica-se a

SetBuffer(Byte[], Int32, Int32)

Origem:
SocketAsyncEventArgs.cs
Origem:
SocketAsyncEventArgs.cs
Origem:
SocketAsyncEventArgs.cs
Origem:
SocketAsyncEventArgs.cs
Origem:
SocketAsyncEventArgs.cs

Define o buffer de dados a ser usado com um método de soquete assíncrono.

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[]

O buffer de dados a ser usado com um método de soquete assíncrono.

offset
Int32

O deslocamento, em bytes, no buffer de dados em que a operação é iniciada.

count
Int32

A quantidade máxima de dados, em bytes, para enviar ou receber no buffer.

Exceções

Há buffers ambíguos especificados. Essa exceção ocorrerá se a Buffer propriedade também não for nula e a BufferList propriedade também não for nula.

Um argumento estava fora do intervalo. Essa exceção ocorrerá se o offset parâmetro for menor que zero ou maior que o comprimento da matriz na Buffer propriedade. Essa exceção também ocorrerá se o count parâmetro for menor que zero ou maior que o comprimento da matriz na Buffer propriedade menos o offset parâmetro.

Exemplos

O exemplo de código a seguir cria um único buffer grande que pode ser dividido e atribuído a SocketAsyncEventArgs objetos para uso com cada operação de E/S de soquete. Isso permite que os buffers sejam facilmente reutilizados e protegidos contra a fragmentação da memória do heap.

// 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);
    }
}

Comentários

O offset parâmetro e count os parâmetros não podem ser números negativos. A combinação entre os parâmetros e os offset parâmetros count deve estar nos limites da matriz de dados no buffer parâmetro.

Esse método define a Buffer propriedade como o buffer parâmetro, a Count propriedade para o count parâmetro e a Offset propriedade para o offset parâmetro.

Confira também

Aplica-se a