Freigeben über


SocketAsyncEventArgs.SetBuffer Methode

Definition

Initialisiert den Datenpuffer, der mit einer asynchronen Socketmethode verwendet werden soll.

Überlädt

SetBuffer(Memory<Byte>)

Legt den Arbeitsspeicherbereich fest, der als Puffer mit einer asynchronen Socketmethode verwendet werden soll.

SetBuffer(Int32, Int32)

Legt den Datenpuffer fest, der mit einer asynchronen Socketmethode verwendet werden soll.

SetBuffer(Byte[], Int32, Int32)

Legt den Datenpuffer fest, der mit einer asynchronen Socketmethode verwendet werden soll.

Hinweise

Diese Methode legt die Buffer -Eigenschaft auf NULL und die Count Eigenschaften und Offset auf 0 (null) fest.

SetBuffer(Memory<Byte>)

Quelle:
SocketAsyncEventArgs.cs
Quelle:
SocketAsyncEventArgs.cs
Quelle:
SocketAsyncEventArgs.cs

Legt den Arbeitsspeicherbereich fest, der als Puffer mit einer asynchronen Socketmethode verwendet werden soll.

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

Parameter

buffer
Memory<Byte>

Der Arbeitsspeicherbereich, der als Puffer mit einer asynchronen Socketmethode verwendet werden soll.

Hinweise

Diese Methode legt die MemoryBuffer -Eigenschaft auf den buffer -Parameter, die Count -Eigenschaft auf die buffer Länge und die Offset -Eigenschaft auf 0 (null) fest.

Gilt für:

SetBuffer(Int32, Int32)

Quelle:
SocketAsyncEventArgs.cs
Quelle:
SocketAsyncEventArgs.cs
Quelle:
SocketAsyncEventArgs.cs

Legt den Datenpuffer fest, der mit einer asynchronen Socketmethode verwendet werden soll.

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)

Parameter

offset
Int32

Der Offset (in Bytes) im Datenpuffer, in dem der Vorgang beginnt.

count
Int32

Die maximale Datenmenge in Bytes, die im Puffer gesendet oder empfangen werden soll.

Ausnahmen

Ein Argument lag außerhalb des gültigen Bereichs. Diese Ausnahme tritt auf, wenn der offset-Parameter kleiner als 0 (null) oder größer als die Länge des Arrays in der Buffer-Eigenschaft ist. Diese Ausnahme tritt außerdem auf, wenn der count-Parameter kleiner als 0 (null) oder größer als die Länge des Arrays in der Buffer-Eigenschaft abzüglich des offset-Parameters ist.

Hinweise

Die offset Parameter und count dürfen keine negativen Zahlen sein. Die Kombination der offset Parameter und count muss sich in den Grenzen des Pufferarrays in der Buffer -Eigenschaft befinden.

Diese Methode legt die Count -Eigenschaft auf den count -Parameter und die Offset -Eigenschaft auf den offset -Parameter fest. Wenn die Buffer Eigenschaft NULL ist, ignoriert diese Methode die offset Parameter und count und legt die Offset Eigenschaften und Count auf 0 fest.

Diese Methode ändert die Buffer -Eigenschaft nicht.

Weitere Informationen

Gilt für:

SetBuffer(Byte[], Int32, Int32)

Quelle:
SocketAsyncEventArgs.cs
Quelle:
SocketAsyncEventArgs.cs
Quelle:
SocketAsyncEventArgs.cs

Legt den Datenpuffer fest, der mit einer asynchronen Socketmethode verwendet werden soll.

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)

Parameter

buffer
Byte[]

Der Datenpuffer, der mit einer asynchronen Socketmethode verwendet werden soll.

offset
Int32

Der Offset (in Bytes) im Datenpuffer, in dem der Vorgang beginnt.

count
Int32

Die maximale Datenmenge in Bytes, die im Puffer gesendet oder empfangen werden soll.

Ausnahmen

Es wurden mehrdeutige Puffer angegeben. Diese Ausnahme tritt auf, wenn die Buffer-Eigenschaft nicht NULL ist und die BufferList-Eigenschaft ebenfalls nicht NULL ist.

Ein Argument lag außerhalb des gültigen Bereichs. Diese Ausnahme tritt auf, wenn der offset-Parameter kleiner als 0 (null) oder größer als die Länge des Arrays in der Buffer-Eigenschaft ist. Diese Ausnahme tritt außerdem auf, wenn der count-Parameter kleiner als 0 (null) oder größer als die Länge des Arrays in der Buffer-Eigenschaft abzüglich des offset-Parameters ist.

Beispiele

Im folgenden Codebeispiel wird ein einzelner großer Puffer erstellt, der aufgeteilt und Objekten zur Verwendung mit jedem Socket-E/A-Vorgang zugewiesen SocketAsyncEventArgs werden kann. Dies ermöglicht die einfache Wiederverwendung von Puffern und schützt vor fragmentiertem Heapspeicher.

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

Hinweise

Die offset Parameter und count dürfen keine negativen Zahlen sein. Die Kombination der offset Parameter und count muss sich in den Grenzen des Datenarrays im buffer Parameter befindet.

Diese Methode legt die Buffer -Eigenschaft auf den buffer -Parameter, die Count -Eigenschaft auf den count -Parameter und die Offset -Eigenschaft auf den offset -Parameter fest.

Weitere Informationen

Gilt für: