SocketAsyncEventArgs.SetBuffer Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Inicializa el búfer de datos que se va a usar con un método de socket asincrónico.
Sobrecargas
| Nombre | Description |
|---|---|
| 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>)
- Source:
- SocketAsyncEventArgs.cs
- Source:
- SocketAsyncEventArgs.cs
- Source:
- SocketAsyncEventArgs.cs
- Source:
- SocketAsyncEventArgs.cs
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
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
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ú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 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)
- 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, 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 reutilizar fácilmente los búferes y protegerse 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 del 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 .