SocketAsyncEventArgs.SetBuffer Yöntem

Tanım

Zaman uyumsuz yuva yöntemiyle kullanılacak veri arabelleği başlatır.

Aşırı Yüklemeler

SetBuffer(Memory<Byte>)

Zaman uyumsuz yuva yöntemiyle arabellek olarak kullanılacak bellek bölgesini ayarlar.

SetBuffer(Int32, Int32)

Zaman uyumsuz yuva yöntemiyle kullanılacak veri arabelleği ayarlar.

SetBuffer(Byte[], Int32, Int32)

Zaman uyumsuz yuva yöntemiyle kullanılacak veri arabelleği ayarlar.

Açıklamalar

Bu yöntem, özelliğini null ve Count ve Offset özelliklerini sıfır olarak ayarlarBuffer.

SetBuffer(Memory<Byte>)

Kaynak:
SocketAsyncEventArgs.cs
Kaynak:
SocketAsyncEventArgs.cs
Kaynak:
SocketAsyncEventArgs.cs

Zaman uyumsuz yuva yöntemiyle arabellek olarak kullanılacak bellek bölgesini ayarlar.

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

Parametreler

buffer
Memory<Byte>

Zaman uyumsuz yuva yöntemiyle arabellek olarak kullanılacak bellek bölgesi.

Açıklamalar

Bu yöntem özelliği parametresine, özelliği uzunluğa ve Offset özelliği sıfır olarak ayarlarMemoryBuffer.bufferCountbuffer

Şunlara uygulanır

SetBuffer(Int32, Int32)

Kaynak:
SocketAsyncEventArgs.cs
Kaynak:
SocketAsyncEventArgs.cs
Kaynak:
SocketAsyncEventArgs.cs

Zaman uyumsuz yuva yöntemiyle kullanılacak veri arabelleği ayarlar.

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)

Parametreler

offset
Int32

İşlemin başladığı veri arabelleğindeki bayt cinsinden uzaklık.

count
Int32

Arabellekte gönderilecek veya alınacak en fazla veri miktarı (bayt cinsinden).

Özel durumlar

Bir bağımsız değişken aralık dışındaydı. Parametre sıfırdan küçükse veya özelliğindeki offset dizinin Buffer uzunluğundan büyükse bu özel durum oluşur. Bu özel durum, parametresi sıfırdan küçükse veya özelliğindeki dizinin Buffer uzunluğundan parametre çıkarılırsa countoffset da oluşur.

Açıklamalar

offset ve count parametreleri negatif sayılar olamaz. ve count parametrelerinin offset birleşimi, özelliğindeki arabellek dizisinin sınırlarında Buffer olmalıdır.

Bu yöntem, özelliğini parametresinecount, Offset özelliğini parametresine offset ayarlarCount. Buffer Özellik null ise, bu yöntem ve count parametrelerini yoksayar offset ve ve Count özelliklerini 0 olarak ayarlarOffset.

Bu yöntem özelliğini değiştirmez Buffer .

Ayrıca bkz.

Şunlara uygulanır

SetBuffer(Byte[], Int32, Int32)

Kaynak:
SocketAsyncEventArgs.cs
Kaynak:
SocketAsyncEventArgs.cs
Kaynak:
SocketAsyncEventArgs.cs

Zaman uyumsuz yuva yöntemiyle kullanılacak veri arabelleği ayarlar.

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)

Parametreler

buffer
Byte[]

Zaman uyumsuz yuva yöntemiyle kullanılacak veri arabelleği.

offset
Int32

İşlemin başladığı veri arabelleğindeki bayt cinsinden uzaklık.

count
Int32

Arabellekte gönderilecek veya alınacak en fazla veri miktarı (bayt cinsinden).

Özel durumlar

Belirsiz arabellekler belirtildi. Özellik de null değilse Buffer ve BufferList özellik de null değilse bu özel durum oluşur.

Bir bağımsız değişken aralık dışındaydı. Parametre sıfırdan küçükse veya özelliğindeki offset dizinin Buffer uzunluğundan büyükse bu özel durum oluşur. Bu özel durum, parametresi sıfırdan küçükse veya özelliğindeki dizinin Buffer uzunluğundan parametre çıkarılırsa countoffset da oluşur.

Örnekler

Aşağıdaki kod örneği, her yuva G/Ç işlemiyle kullanılmak üzere bölünebilen ve nesnelere SocketAsyncEventArgs atanabilen tek bir büyük arabellek oluşturur. Bu, arabelleklerin kolayca yeniden kullanılmasını sağlar ve parçalanan yığın belleğine karşı koruma sağlar.

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

Açıklamalar

offset ve count parametreleri negatif sayılar olamaz. ve count parametrelerinin offset birleşimi, parametredeki veri dizisinin sınırları içinde buffer olmalıdır.

Bu yöntem, özelliğini parametresine, özelliğini parametresine count ve Offset özelliğini parametresine offset ayarlarBuffer.Countbuffer

Ayrıca bkz.

Şunlara uygulanır