SocketAsyncEventArgs.SetBuffer Méthode

Définition

Initialise la mémoire tampon de données à utiliser avec une méthode de socket asynchrone.

Surcharges

SetBuffer(Memory<Byte>)

Définit la zone de mémoire à utiliser comme mémoire tampon avec une méthode de socket asynchrone.

SetBuffer(Int32, Int32)

Définit la mémoire tampon de données à utiliser avec une méthode de socket asynchrone.

SetBuffer(Byte[], Int32, Int32)

Définit la mémoire tampon de données à utiliser avec une méthode de socket asynchrone.

Remarques

Cette méthode définit la propriété sur Buffer null et les Count propriétés et Offset sur zéro.

SetBuffer(Memory<Byte>)

Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs

Définit la zone de mémoire à utiliser comme mémoire tampon avec une méthode de socket asynchrone.

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

Paramètres

buffer
Memory<Byte>

Zone de mémoire à utiliser comme mémoire tampon avec une méthode de socket asynchrone.

Remarques

Cette méthode définit la MemoryBuffer propriété sur le buffer paramètre, la Count propriété sur la buffer longueur et la Offset propriété sur zéro.

S’applique à

SetBuffer(Int32, Int32)

Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs

Définit la mémoire tampon de données à utiliser avec une méthode de socket asynchrone.

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)

Paramètres

offset
Int32

Offset, en octets, dans la mémoire tampon de données où l'opération démarre.

count
Int32

Quantité maximale de données, en octets, à envoyer ou à recevoir dans la mémoire tampon.

Exceptions

Un argument est hors limites. Cette exception se produit si le paramètre offset est inférieur à zéro ou supérieur à la longueur du tableau dans la propriété Buffer. Cette exception se produit également si le paramètre count est inférieur à zéro ou supérieur à la longueur du tableau dans la propriété Buffer moins le paramètre offset.

Remarques

Les offset paramètres et count ne peuvent pas être des nombres négatifs. La combinaison des offset paramètres et count doit être dans les limites du tableau de mémoires tampons dans la Buffer propriété .

Cette méthode définit la Count propriété sur le count paramètre et la Offset propriété sur le offset paramètre . Si la propriété a la Buffer valeur Null, cette méthode ignore les offset paramètres et count et définit les propriétés et Count sur Offset 0.

Cette méthode ne modifie pas la Buffer propriété .

Voir aussi

S’applique à

SetBuffer(Byte[], Int32, Int32)

Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs
Source:
SocketAsyncEventArgs.cs

Définit la mémoire tampon de données à utiliser avec une méthode de socket asynchrone.

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)

Paramètres

buffer
Byte[]

Mémoire tampon de données à utiliser avec une méthode de socket asynchrone.

offset
Int32

Offset, en octets, dans la mémoire tampon de données où l'opération démarre.

count
Int32

Quantité maximale de données, en octets, à envoyer ou à recevoir dans la mémoire tampon.

Exceptions

Des mémoires tampons ambiguës sont spécifiées. Cette exception se produit si la valeur des propriétés Buffer et BufferList n'est pas Null.

Un argument est hors limites. Cette exception se produit si le paramètre offset est inférieur à zéro ou supérieur à la longueur du tableau dans la propriété Buffer. Cette exception se produit également si le paramètre count est inférieur à zéro ou supérieur à la longueur du tableau dans la propriété Buffer moins le paramètre offset.

Exemples

L’exemple de code suivant crée une mémoire tampon volumineuse unique qui peut être divisée et affectée à des objets à SocketAsyncEventArgs utiliser avec chaque opération d’E/S de socket. Cela permet aux mémoires tampons d’être facilement réutilisées et protège contre la fragmentation de la mémoire du tas.

// 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);
    }
}

Remarques

Les offset paramètres et count ne peuvent pas être des nombres négatifs. La combinaison des offset paramètres et count doit être dans les limites du tableau de données dans le buffer paramètre .

Cette méthode définit la Buffer propriété sur le buffer paramètre, la Count propriété sur le count paramètre et la Offset propriété sur le offset paramètre .

Voir aussi

S’applique à