SocketAsyncEventArgs.SetBuffer Metod

Definition

Initierar databufferten som ska användas med en asynkron socketmetod.

Överlagringar

Name Description
SetBuffer(Memory<Byte>)

Anger den minnesregion som ska användas som en buffert med en asynkron socketmetod.

SetBuffer(Int32, Int32)

Anger vilken databuffert som ska användas med en asynkron socketmetod.

SetBuffer(Byte[], Int32, Int32)

Anger vilken databuffert som ska användas med en asynkron socketmetod.

Kommentarer

Den här metoden anger Buffer egenskapen till null och Count egenskaperna och Offset till noll.

SetBuffer(Memory<Byte>)

Källa:
SocketAsyncEventArgs.cs
Källa:
SocketAsyncEventArgs.cs
Källa:
SocketAsyncEventArgs.cs
Källa:
SocketAsyncEventArgs.cs
Källa:
SocketAsyncEventArgs.cs

Anger den minnesregion som ska användas som en buffert med en asynkron socketmetod.

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

Parametrar

buffer
Memory<Byte>

Den minnesregion som ska användas som buffert med en asynkron socketmetod.

Kommentarer

Den här metoden anger MemoryBuffer egenskapen till parametern buffer , Count egenskapen till buffer längden och Offset egenskapen till noll.

Gäller för

SetBuffer(Int32, Int32)

Källa:
SocketAsyncEventArgs.cs
Källa:
SocketAsyncEventArgs.cs
Källa:
SocketAsyncEventArgs.cs
Källa:
SocketAsyncEventArgs.cs
Källa:
SocketAsyncEventArgs.cs

Anger vilken databuffert som ska användas med en asynkron socketmetod.

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)

Parametrar

offset
Int32

Förskjutningen, i byte, i databufferten där åtgärden startar.

count
Int32

Den maximala mängden data, i byte, som ska skickas eller ta emot i bufferten.

Undantag

Ett argument låg utom räckhåll. Det här undantaget inträffar om parametern offset är mindre än noll eller större än matrisens längd i egenskapen Buffer . Det här undantaget inträffar också om parametern count är mindre än noll eller större än matrisens längd i Buffer egenskapen minus parametern offset .

Kommentarer

Parametrarna offset och count får inte vara negativa tal. Kombinationen av parametrarna offset och count måste vara inom gränserna för buffertmatrisen i egenskapen Buffer .

Den här metoden anger Count egenskapen till parametern count och egenskapen Offset till parametern offset . Om egenskapen Buffer är null ignorerar den här metoden parametrarna offset och count anger Offset egenskaperna och Count till 0.

Den här metoden ändrar inte egenskapen Buffer .

Se även

Gäller för

SetBuffer(Byte[], Int32, Int32)

Källa:
SocketAsyncEventArgs.cs
Källa:
SocketAsyncEventArgs.cs
Källa:
SocketAsyncEventArgs.cs
Källa:
SocketAsyncEventArgs.cs
Källa:
SocketAsyncEventArgs.cs

Anger vilken databuffert som ska användas med en asynkron socketmetod.

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)

Parametrar

buffer
Byte[]

Databufferten som ska användas med en asynkron socketmetod.

offset
Int32

Förskjutningen, i byte, i databufferten där åtgärden startar.

count
Int32

Den maximala mängden data, i byte, som ska skickas eller ta emot i bufferten.

Undantag

Det finns tvetydiga buffertar angivna. Det här undantaget inträffar om egenskapen Buffer inte heller är null och egenskapen BufferList inte heller är null.

Ett argument låg utom räckhåll. Det här undantaget inträffar om parametern offset är mindre än noll eller större än matrisens längd i egenskapen Buffer . Det här undantaget inträffar också om parametern count är mindre än noll eller större än matrisens längd i Buffer egenskapen minus parametern offset .

Exempel

I följande kodexempel skapas en enda stor buffert som kan delas upp och tilldelas objekt SocketAsyncEventArgs för användning med varje socket-I/O-åtgärd. Detta gör att buffertar enkelt kan återanvändas och skyddar mot fragmentering av heapminne.

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

Kommentarer

Parametrarna offset och count får inte vara negativa tal. Kombinationen av parametrarna offset och count måste vara inom gränserna för datamatrisen i parametern buffer .

Den här metoden anger Buffer egenskapen till parametern buffer , Count egenskapen till parametern count och Offset egenskapen till parametern offset .

Se även

Gäller för