Condividi tramite


SocketAsyncEventArgs.SetBuffer Metodo

Definizione

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

buffer
Memory<Byte>

Area di memoria da usare come buffer con un metodo socket asincrono.

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à buffercount sul parametro e la Offset proprietà sul offset parametro.

Vedi anche

Si applica a