SocketAsyncEventArgs.SetBuffer Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Inizializza il buffer di dati da utilizzare con un metodo socket asincrono.
Overload
SetBuffer(Memory<Byte>) |
Imposta l'area di memoria da usare come buffer con un metodo socket asincrono. |
SetBuffer(Int32, Int32) |
Imposta il buffer di dati da utilizzare con un metodo socket asincrono. |
SetBuffer(Byte[], Int32, Int32) |
Imposta il buffer di dati da utilizzare con un metodo socket asincrono. |
Commenti
Questo metodo imposta la Buffer proprietà su Null e le Count proprietà e Offset su zero.
SetBuffer(Memory<Byte>)
- Origine:
- SocketAsyncEventArgs.cs
- Origine:
- SocketAsyncEventArgs.cs
- Origine:
- SocketAsyncEventArgs.cs
Imposta l'area di memoria da usare come buffer con un metodo socket asincrono.
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))
Parametri
Commenti
Questo metodo imposta la MemoryBuffer proprietà sul parametro, la Count proprietà buffer
sulla buffer
lunghezza e la Offset proprietà su zero.
Si applica a
SetBuffer(Int32, Int32)
- Origine:
- SocketAsyncEventArgs.cs
- Origine:
- SocketAsyncEventArgs.cs
- Origine:
- SocketAsyncEventArgs.cs
Imposta il buffer di dati da utilizzare con un metodo socket asincrono.
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)
Parametri
- offset
- Int32
Offset, in byte, nel buffer di dati dove viene avviata l'operazione.
- count
- Int32
Quantità massima di dati, in byte, da inviare o ricevere nel buffer.
Eccezioni
Un argomento non è stato compreso nell'intervallo. Questa eccezione si verifica se il parametro offset
è minore di zero o maggiore della lunghezza della matrice nella proprietà Buffer. Questa eccezione si verifica anche se il parametro count
è minore di zero o maggiore della lunghezza della matrice nella proprietà Buffer meno il parametro offset
.
Commenti
I offset
parametri e count
non possono essere numeri negativi. La combinazione dei offset
parametri e count
deve essere associata alla matrice di buffer nella Buffer proprietà .
Questo metodo imposta la Count proprietà sul count
parametro e la Offset proprietà sul offset
parametro. Se la Buffer proprietà è Null, questo metodo ignora i offset
parametri e count
e imposta le Offset proprietà e Count su 0.
Questo metodo non modifica la Buffer proprietà.
Vedi anche
Si applica a
SetBuffer(Byte[], Int32, Int32)
- Origine:
- SocketAsyncEventArgs.cs
- Origine:
- SocketAsyncEventArgs.cs
- Origine:
- SocketAsyncEventArgs.cs
Imposta il buffer di dati da utilizzare con un metodo socket asincrono.
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)
Parametri
- buffer
- Byte[]
Buffer di dati da utilizzare con un metodo socket asincrono.
- offset
- Int32
Offset, in byte, nel buffer di dati dove viene avviata l'operazione.
- count
- Int32
Quantità massima di dati, in byte, da inviare o ricevere nel buffer.
Eccezioni
Sono stati specificati buffer ambigui. Questa eccezione si verifica anche se le proprietà Buffer e BufferList non sono null.
Un argomento non è stato compreso nell'intervallo. Questa eccezione si verifica se il parametro offset
è minore di zero o maggiore della lunghezza della matrice nella proprietà Buffer. Questa eccezione si verifica anche se il parametro count
è minore di zero o maggiore della lunghezza della matrice nella proprietà Buffer meno il parametro offset
.
Esempio
Nell'esempio di codice seguente viene creato un singolo buffer di grandi dimensioni che può essere suddiviso e assegnato agli SocketAsyncEventArgs oggetti da usare con ogni operazione di I/O socket. In questo modo, i buffer possono essere facilmente riutilizzati e guardie contro la memoria heap di frammento.
// 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);
}
}
Commenti
I offset
parametri e count
non possono essere numeri negativi. La combinazione dei parametri e count
deve essere associata alla matrice di offset
dati nel buffer
parametro.
Questo metodo imposta la Buffer proprietà sul parametro, la Count proprietà buffer
count
sul parametro e la Offset proprietà sul offset
parametro.