SocketAsyncEventArgs.SetBuffer Metoda

Definice

Inicializuje datovou vyrovnávací paměť pro použití s asynchronní metodou soketu.

Přetížení

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 pro použití s asynchronní metodou soketu.

SetBuffer(Byte[], Int32, Int32)

Nastaví vyrovnávací paměť dat pro použití s asynchronní metodou soketu.

Poznámky

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

SetBuffer(Memory<Byte>)

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 parametru buffer , 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

Nastaví vyrovnávací paměť dat pro použití 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 operace začíná.

count
Int32

Maximální množství dat v bajtech, které se mají odeslat nebo přijmout ve vyrovnávací paměti.

Výjimky

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

Poznámky

Parametry offset a count nemohou být záporná čísla. Kombinace offset parametrů a count 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 parametry a count a nastaví Offset vlastnosti a Count 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

Nastaví vyrovnávací paměť dat pro použití 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[]

Vyrovnávací paměť dat, která se má použít s metodou asynchronního soketu.

offset
Int32

Posun v bajtech ve vyrovnávací paměti dat, kde operace začíná.

count
Int32

Maximální množství dat v bajtech, které se mají odeslat nebo přijmout ve vyrovnávací paměti.

Výjimky

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

Argument byl mimo rozsah. K této výjimce dochází, offset pokud je parametr menší než nula nebo větší než délka pole ve Buffer vlastnosti. K této výjimce dochází také v count případě, že 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ěť, která může být rozdělena a přiřazena objektům SocketAsyncEventArgs 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 proti fragmentování 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

Parametry offset a count nemohou být záporná čísla. Kombinace offset parametrů a count musí být v mezích pole dat v parametru buffer .

Tato metoda nastaví Buffer vlastnost parametru Countbuffer, vlastnost parametru count a Offset vlastnost parametruoffset.

Viz také

Platí pro