Bagikan melalui


SocketAsyncEventArgs.SetBuffer Metode

Definisi

Menginisialisasi buffer data untuk digunakan dengan metode soket asinkron.

Overload

SetBuffer(Memory<Byte>)

Mengatur wilayah memori yang akan digunakan sebagai buffer dengan metode soket asinkron.

SetBuffer(Int32, Int32)

Mengatur buffer data untuk digunakan dengan metode soket asinkron.

SetBuffer(Byte[], Int32, Int32)

Mengatur buffer data untuk digunakan dengan metode soket asinkron.

Keterangan

Metode ini mengatur Buffer properti ke null dan Count properti dan Offset menjadi nol.

SetBuffer(Memory<Byte>)

Sumber:
SocketAsyncEventArgs.cs
Sumber:
SocketAsyncEventArgs.cs
Sumber:
SocketAsyncEventArgs.cs

Mengatur wilayah memori yang akan digunakan sebagai buffer dengan metode soket asinkron.

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>

Wilayah memori yang akan digunakan sebagai buffer dengan metode soket asinkron.

Keterangan

Metode ini mengatur MemoryBuffer properti ke buffer parameter, Count properti ke buffer panjang, dan Offset properti ke nol.

Berlaku untuk

SetBuffer(Int32, Int32)

Sumber:
SocketAsyncEventArgs.cs
Sumber:
SocketAsyncEventArgs.cs
Sumber:
SocketAsyncEventArgs.cs

Mengatur buffer data untuk digunakan dengan metode soket asinkron.

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

Offset, dalam byte, di buffer data tempat operasi dimulai.

count
Int32

Jumlah maksimum data, dalam byte, untuk dikirim atau diterima dalam buffer.

Pengecualian

Argumen berada di luar jangkauan. Pengecualian ini terjadi jika offset parameter kurang dari nol atau lebih besar dari panjang array dalam Buffer properti . Pengecualian ini juga terjadi jika count parameter kurang dari nol atau lebih besar dari panjang array dalam properti dikurangi Bufferoffset parameter .

Keterangan

Parameter offset dan count tidak boleh berupa angka negatif. Kombinasi offset parameter dan count harus berada dalam batas array buffer di Buffer properti .

Metode ini mengatur Count properti ke count parameter dan Offset properti ke offset parameter . Buffer Jika properti null, metode ini mengabaikan offset parameter dan count dan mengatur Offset properti dan Count ke 0.

Metode ini tidak mengubah Buffer properti .

Lihat juga

Berlaku untuk

SetBuffer(Byte[], Int32, Int32)

Sumber:
SocketAsyncEventArgs.cs
Sumber:
SocketAsyncEventArgs.cs
Sumber:
SocketAsyncEventArgs.cs

Mengatur buffer data untuk digunakan dengan metode soket asinkron.

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

Buffer data yang digunakan dengan metode soket asinkron.

offset
Int32

Offset, dalam byte, di buffer data tempat operasi dimulai.

count
Int32

Jumlah maksimum data, dalam byte, untuk dikirim atau diterima dalam buffer.

Pengecualian

Ada buffer ambigu yang ditentukan. Pengecualian ini terjadi jika Buffer properti juga tidak null dan BufferList properti juga tidak null.

Argumen berada di luar jangkauan. Pengecualian ini terjadi jika offset parameter kurang dari nol atau lebih besar dari panjang array dalam Buffer properti . Pengecualian ini juga terjadi jika count parameter kurang dari nol atau lebih besar dari panjang array dalam properti dikurangi Bufferoffset parameter .

Contoh

Contoh kode berikut membuat buffer besar tunggal yang dapat dibagi dan ditetapkan ke SocketAsyncEventArgs objek untuk digunakan dengan setiap operasi I/O soket. Ini memungkinkan buffer untuk dengan mudah digunakan kembali dan melindungi dari memori tumpukan terfragmentasi.

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

Keterangan

Parameter offset dan count tidak boleh berupa angka negatif. Kombinasi offset parameter dan count harus berada dalam batas array data dalam buffer parameter .

Metode ini mengatur Buffer properti ke buffer parameter, Count properti ke count parameter , dan Offset properti ke offset parameter .

Lihat juga

Berlaku untuk