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
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
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
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
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 .