SocketAsyncEventArgs.SetBuffer Methode

Definitie

Initialiseert de gegevensbuffer voor gebruik met een asynchrone socketmethode.

Overloads

Name Description
SetBuffer(Memory<Byte>)

Hiermee stelt u het geheugengebied in dat moet worden gebruikt als buffer met een asynchrone socketmethode.

SetBuffer(Int32, Int32)

Hiermee stelt u de gegevensbuffer in voor gebruik met een asynchrone socketmethode.

SetBuffer(Byte[], Int32, Int32)

Hiermee stelt u de gegevensbuffer in voor gebruik met een asynchrone socketmethode.

Opmerkingen

Met deze methode wordt de Buffer eigenschap ingesteld op null en de Count eigenschappen op Offset nul.

SetBuffer(Memory<Byte>)

Hiermee stelt u het geheugengebied in dat moet worden gebruikt als buffer met een asynchrone socketmethode.

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

Parameters

buffer
Memory<Byte>

Het geheugengebied dat moet worden gebruikt als buffer met een asynchrone socketmethode.

Opmerkingen

Met deze methode wordt de MemoryBuffer eigenschap ingesteld op de buffer parameter, de Count eigenschap op de buffer lengte en de Offset eigenschap op nul.

Van toepassing op

SetBuffer(Int32, Int32)

Hiermee stelt u de gegevensbuffer in voor gebruik met een asynchrone socketmethode.

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)

Parameters

offset
Int32

De offset, in bytes, in de gegevensbuffer waar de bewerking wordt gestart.

count
Int32

De maximale hoeveelheid gegevens, in bytes, die in de buffer moet worden verzonden of ontvangen.

Uitzonderingen

Een argument ligt buiten het bereik. Deze uitzondering treedt op als de offset parameter kleiner is dan nul of groter is dan de lengte van de matrix in de Buffer eigenschap. Deze uitzondering treedt ook op als de count parameter kleiner is dan nul of groter is dan de lengte van de matrix in de Buffer eigenschap min de offset parameter.

Opmerkingen

De offset en count parameters kunnen geen negatieve getallen zijn. De combinatie van de offset en count parameters moet zich in de grenzen van de buffermatrix in de Buffer eigenschap bevinden.

Met deze methode wordt de Count eigenschap ingesteld op de count parameter en de Offset eigenschap op de offset parameter. Als de Buffer eigenschap null is, negeert deze methode de offset en count parameters en stelt u de Offset en Count eigenschappen in op 0.

Met deze methode wordt de Buffer eigenschap niet gewijzigd.

Zie ook

Van toepassing op

SetBuffer(Byte[], Int32, Int32)

Hiermee stelt u de gegevensbuffer in voor gebruik met een asynchrone socketmethode.

public:
 void SetBuffer(cli::array <System::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)

Parameters

buffer
Byte[]

De gegevensbuffer die moet worden gebruikt met een asynchrone socketmethode.

offset
Int32

De offset, in bytes, in de gegevensbuffer waar de bewerking wordt gestart.

count
Int32

De maximale hoeveelheid gegevens, in bytes, die in de buffer moet worden verzonden of ontvangen.

Uitzonderingen

Er zijn dubbelzinnige buffers opgegeven. Deze uitzondering treedt op als de Buffer eigenschap ook niet null is en de BufferList eigenschap ook niet null is.

Een argument ligt buiten het bereik. Deze uitzondering treedt op als de offset parameter kleiner is dan nul of groter is dan de lengte van de matrix in de Buffer eigenschap. Deze uitzondering treedt ook op als de count parameter kleiner is dan nul of groter is dan de lengte van de matrix in de Buffer eigenschap min de offset parameter.

Voorbeelden

In het volgende codevoorbeeld wordt één grote buffer gemaakt die kan worden verdeeld en toegewezen aan SocketAsyncEventArgs objecten voor gebruik met elke socket-I/O-bewerking. Hierdoor kunnen buffers eenvoudig opnieuw worden gebruikt en worden beschermd tegen fragmenterend heap-geheugen.

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

Opmerkingen

De offset en count parameters kunnen geen negatieve getallen zijn. De combinatie van de offset en count parameters moet zich in de grenzen van de gegevensmatrix in de buffer parameter bevinden.

Met deze methode wordt de Buffer eigenschap ingesteld op de buffer parameter, de Count eigenschap op de count parameter en de Offset eigenschap op de offset parameter.

Zie ook

Van toepassing op