SocketAsyncEventArgs.SetBuffer Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Inicializa o buffer de dados a ser usado com um método de soquete assíncrono.
Sobrecargas
SetBuffer(Memory<Byte>) |
Define a região de 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 como zero.
SetBuffer(Memory<Byte>)
- Origem:
- SocketAsyncEventArgs.cs
- Origem:
- SocketAsyncEventArgs.cs
- Origem:
- SocketAsyncEventArgs.cs
Define a região de 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
A região de 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
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, a ser enviada ou recebida no buffer.
Exceções
Um argumento estava fora do intervalo. Essa exceção ocorre quando o parâmetro offset
é menor que zero ou maior que o tamanho da matriz na propriedade Buffer. Essa exceção também ocorre quando o parâmetro count
for menor que zero ou maior que o tamanho da matriz na propriedade Buffer menos o parâmetro offset
.
Comentários
Os offset
parâmetros e count
não podem ser números negativos. A combinação dos offset
parâmetros e count
deve estar nos limites da matriz de buffers na Buffer propriedade .
Esse método define a Count propriedade como o count
parâmetro e a Offset propriedade como o offset
parâmetro . Se a Buffer propriedade for nula, esse método ignorará os offset
parâmetros e count
e definirá as Offset propriedades e Count 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
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, a ser enviada ou recebida no buffer.
Exceções
Há buffers ambíguos especificados. Essa exceção ocorre quando a propriedade Buffer não é nula e a propriedade BufferList também não é nula.
Um argumento estava fora do intervalo. Essa exceção ocorre quando o parâmetro offset
é menor que zero ou maior que o tamanho da matriz na propriedade Buffer. Essa exceção também ocorre quando o parâmetro count
for menor que zero ou maior que o tamanho da matriz na propriedade Buffer menos o parâmetro offset
.
Exemplos
O exemplo de código a seguir cria um único buffer grande que pode ser dividido e atribuído a objetos para SocketAsyncEventArgs uso com cada operação de E/S de soquete. Isso permite que os buffers sejam facilmente reutilizados e protegidos contra 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
Os offset
parâmetros e count
não podem ser números negativos. A combinação dos offset
parâmetros e 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 .