Sdílet prostřednictvím


SocketAsyncEventArgs.SetBuffer Metoda

Definice

Inicializuje datovou vyrovnávací paměť, která se použije s asynchronní metodou soketu.

Přetížení

Name Description
SetBuffer(Memory<Byte>)

Nastaví oblast paměti, která se má použít jako vyrovnávací paměť s asynchronní metodou soketu.

SetBuffer(Int32, Int32)

Nastaví vyrovnávací paměť dat tak, aby se používala s asynchronní metodou soketu.

SetBuffer(Byte[], Int32, Int32)

Nastaví vyrovnávací paměť dat tak, aby se používala s asynchronní metodou soketu.

Poznámky

Tato metoda nastaví Buffer vlastnost na hodnotu null a vlastnosti Offset na nuluCount.

SetBuffer(Memory<Byte>)

Zdroj:
SocketAsyncEventArgs.cs
Zdroj:
SocketAsyncEventArgs.cs
Zdroj:
SocketAsyncEventArgs.cs
Zdroj:
SocketAsyncEventArgs.cs
Zdroj:
SocketAsyncEventArgs.cs

Nastaví oblast paměti, která se má použít jako vyrovnávací paměť s asynchronní metodou soketu.

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

Parametry

buffer
Memory<Byte>

Oblast paměti, která se má použít jako vyrovnávací paměť s asynchronní metodou soketu.

Poznámky

Tato metoda nastaví MemoryBuffer vlastnost na buffer parametr, Count vlastnost na délku buffer a vlastnost na nulu Offset .

Platí pro

SetBuffer(Int32, Int32)

Zdroj:
SocketAsyncEventArgs.cs
Zdroj:
SocketAsyncEventArgs.cs
Zdroj:
SocketAsyncEventArgs.cs
Zdroj:
SocketAsyncEventArgs.cs
Zdroj:
SocketAsyncEventArgs.cs

Nastaví vyrovnávací paměť dat tak, aby se používala s asynchronní metodou soketu.

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)

Parametry

offset
Int32

Posun v bajtech ve vyrovnávací paměti dat, kde se operace spouští.

count
Int32

Maximální množství dat v bajtech pro odesílání nebo příjem v vyrovnávací paměti.

Výjimky

Argument byl mimo rozsah. K této výjimce dochází, pokud offset je parametr menší než nula nebo větší než délka pole ve Buffer vlastnosti. K této výjimce dochází také v případě, že count parametr je menší než nula nebo větší než délka pole ve Buffer vlastnosti minus offset parametr.

Poznámky

count Parametry offset nemohou být záporná čísla. offset Kombinace parametrů a count parametrů musí být v mezích pole vyrovnávací paměti ve Buffer vlastnosti.

Tato metoda nastaví Count vlastnost na count parametr a Offset vlastnost na offset parametr. Buffer Pokud je vlastnost null, tato metoda ignoruje offset a count parametry a nastaví Offset a Count vlastnosti na 0.

Tato metoda nemění Buffer vlastnost.

Viz také

Platí pro

SetBuffer(Byte[], Int32, Int32)

Zdroj:
SocketAsyncEventArgs.cs
Zdroj:
SocketAsyncEventArgs.cs
Zdroj:
SocketAsyncEventArgs.cs
Zdroj:
SocketAsyncEventArgs.cs
Zdroj:
SocketAsyncEventArgs.cs

Nastaví vyrovnávací paměť dat tak, aby se používala s asynchronní metodou soketu.

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)

Parametry

buffer
Byte[]

Datová vyrovnávací paměť, která se má použít s asynchronní metodou soketu.

offset
Int32

Posun v bajtech ve vyrovnávací paměti dat, kde se operace spouští.

count
Int32

Maximální množství dat v bajtech pro odesílání nebo příjem v vyrovnávací paměti.

Výjimky

Jsou zadány nejednoznačné vyrovnávací paměti. K této výjimce dochází, pokud Buffer vlastnost není také null a BufferList vlastnost není null.

Argument byl mimo rozsah. K této výjimce dochází, pokud offset je parametr menší než nula nebo větší než délka pole ve Buffer vlastnosti. K této výjimce dochází také v případě, že count parametr je menší než nula nebo větší než délka pole ve Buffer vlastnosti minus offset parametr.

Příklady

Následující příklad kódu vytvoří jednu velkou vyrovnávací paměť, kterou lze rozdělit a přiřadit k SocketAsyncEventArgs objektům pro použití s každou vstupně-výstupní operací soketu. To umožňuje snadné opakované použití vyrovnávacích pamětí a ochranu před fragmentováním paměti haldy.

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

Poznámky

count Parametry offset nemohou být záporná čísla. offset Kombinace parametrů a count parametrů musí být v mezích datového pole v parametrubuffer.

Tato metoda nastaví Buffer vlastnost na buffer parametr, Count vlastnost na count parametr a Offset vlastnost na offset parametr.

Viz také

Platí pro