Udostępnij za pośrednictwem


SocketAsyncEventArgs.SetBuffer Metoda

Definicja

Inicjuje bufor danych do użycia z metodą asynchronicznego gniazda.

Przeciążenia

SetBuffer(Memory<Byte>)

Ustawia region pamięci, który ma być używany jako bufor z asynchroniczną metodą gniazda.

SetBuffer(Int32, Int32)

Ustawia bufor danych do użycia z metodą asynchronicznego gniazda.

SetBuffer(Byte[], Int32, Int32)

Ustawia bufor danych do użycia z metodą asynchronicznego gniazda.

Uwagi

Ta metoda ustawia Buffer właściwość na null, a Count właściwości i Offset na zero.

SetBuffer(Memory<Byte>)

Źródło:
SocketAsyncEventArgs.cs
Źródło:
SocketAsyncEventArgs.cs
Źródło:
SocketAsyncEventArgs.cs

Ustawia region pamięci, który ma być używany jako bufor z asynchroniczną metodą gniazda.

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>

Region pamięci, który ma być używany jako bufor z asynchroniczną metodą gniazda.

Uwagi

Ta metoda ustawia MemoryBuffer właściwość na buffer parametr, Count właściwość na buffer długość i Offset właściwość na zero.

Dotyczy

SetBuffer(Int32, Int32)

Źródło:
SocketAsyncEventArgs.cs
Źródło:
SocketAsyncEventArgs.cs
Źródło:
SocketAsyncEventArgs.cs

Ustawia bufor danych do użycia z metodą asynchronicznego gniazda.

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

Przesunięcie w bajtach w buforze danych, w którym rozpoczyna się operacja.

count
Int32

Maksymalna ilość danych w bajtach do wysyłania lub odbierania w buforze.

Wyjątki

Argument był poza zakresem. Ten wyjątek występuje, jeśli offset parametr jest mniejszy niż zero lub większy niż długość tablicy we Buffer właściwości. Ten wyjątek występuje również wtedy, gdy count parametr jest mniejszy niż zero lub większy niż długość tablicy we Buffer właściwości minus parametr.offset

Uwagi

Parametry offset i count nie mogą być liczbami ujemnymi. Kombinacja parametrów offset i count musi znajdować się w granicach tablicy buforów we Buffer właściwości .

Ta metoda ustawia Count właściwość na count parametr i Offset właściwość parametru offset . Buffer Jeśli właściwość ma wartość null, ta metoda ignoruje offset parametry i count i ustawia Offset właściwości i Count na wartość 0.

Ta metoda nie zmienia Buffer właściwości.

Zobacz też

Dotyczy

SetBuffer(Byte[], Int32, Int32)

Źródło:
SocketAsyncEventArgs.cs
Źródło:
SocketAsyncEventArgs.cs
Źródło:
SocketAsyncEventArgs.cs

Ustawia bufor danych do użycia z metodą asynchronicznego gniazda.

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[]

Bufor danych do użycia z metodą asynchronicznego gniazda.

offset
Int32

Przesunięcie w bajtach w buforze danych, w którym rozpoczyna się operacja.

count
Int32

Maksymalna ilość danych w bajtach do wysyłania lub odbierania w buforze.

Wyjątki

Określono niejednoznaczne bufory. Ten wyjątek występuje, jeśli Buffer właściwość nie ma również wartości null, a BufferList właściwość nie ma również wartości null.

Argument był poza zakresem. Ten wyjątek występuje, jeśli offset parametr jest mniejszy niż zero lub większy niż długość tablicy we Buffer właściwości. Ten wyjątek występuje również wtedy, gdy count parametr jest mniejszy niż zero lub większy niż długość tablicy we Buffer właściwości minus parametr.offset

Przykłady

Poniższy przykład kodu tworzy jeden duży bufor, który można podzielić i przypisać do SocketAsyncEventArgs obiektów do użycia z każdą operacją we/wy gniazda. Dzięki temu bufory mogą być łatwo używane i chronić przed fragmentowaniem pamięci stert.

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

Uwagi

Parametry offset i count nie mogą być liczbami ujemnymi. Kombinacja parametrów offset i count musi znajdować się w granicach tablicy danych w parametrze buffer .

Ta metoda ustawia właściwość na buffer parametr, Count właściwość na count parametr i Offset właściwość parametruoffset.Buffer

Zobacz też

Dotyczy