SocketAsyncEventArgs.SetBuffer SocketAsyncEventArgs.SetBuffer SocketAsyncEventArgs.SetBuffer SocketAsyncEventArgs.SetBuffer Method

定義

非同期ソケット メソッドで使用するデータ バッファーを初期化します。Initializes the data buffer to use with an asynchronous socket method.

オーバーロード

SetBuffer(Memory<Byte>) SetBuffer(Memory<Byte>) SetBuffer(Memory<Byte>) SetBuffer(Memory<Byte>)
SetBuffer(Int32, Int32) SetBuffer(Int32, Int32) SetBuffer(Int32, Int32) SetBuffer(Int32, Int32)

非同期ソケット メソッドで使用するデータ バッファーを設定します。Sets the data buffer to use with an asynchronous socket method.

SetBuffer(Byte[], Int32, Int32) SetBuffer(Byte[], Int32, Int32) SetBuffer(Byte[], Int32, Int32) SetBuffer(Byte[], Int32, Int32)

非同期ソケット メソッドで使用するデータ バッファーを設定します。Sets the data buffer to use with an asynchronous socket method.

注釈

このメソッドは、設定、Bufferプロパティを null とCountOffsetプロパティを 0 にします。This method sets the Buffer property to null and the Count and Offset properties to zero.

SetBuffer(Memory<Byte>) SetBuffer(Memory<Byte>) SetBuffer(Memory<Byte>) SetBuffer(Memory<Byte>)

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

パラメーター

buffer
Memory<Byte>

SetBuffer(Int32, Int32) SetBuffer(Int32, Int32) SetBuffer(Int32, Int32) SetBuffer(Int32, Int32)

非同期ソケット メソッドで使用するデータ バッファーを設定します。Sets the data buffer to use with an asynchronous socket method.

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)

パラメーター

offset
Int32 Int32 Int32 Int32

操作を開始するデータ バッファーのオフセット (バイト単位)。The offset, in bytes, in the data buffer where the operation starts.

count
Int32 Int32 Int32 Int32

バッファー内で送信または受信するデータの最大量 (バイト単位)。The maximum amount of data, in bytes, to send or receive in the buffer.

例外

引数が範囲外です。An argument was out of range. この例外は、offset パラメーターがゼロ未満であるか、Buffer プロパティの配列の長さよりも大きい場合に発生します。This exception occurs if the offset parameter is less than zero or greater than the length of the array in the Buffer property. また、count パラメーターがゼロ未満であるか、Buffer プロパティの配列の長さから offset パラメーターを引いた長さよりも大きい場合にも、この例外が発生します。This exception also occurs if the count parameter is less than zero or greater than the length of the array in the Buffer property minus the offset parameter.

注釈

offsetcountパラメーターが負の数値にすることはできません。The offset and count parameters can't be negative numbers. 組み合わせ、offsetcountのバッファー配列の境界内のパラメーターがある必要があります、Bufferプロパティ。The combination of the offset and count parameters must be in bounds of the buffer array in the Buffer property.

このメソッドは、設定、CountプロパティをcountパラメーターおよびOffsetプロパティをoffsetパラメーター。This method sets the Count property to the count parameter and the Offset property to the offset parameter. 場合、Bufferプロパティが null で、このメソッドは無視、offsetcountパラメーターと設定、OffsetCountプロパティを 0 にします。If the Buffer property is null, this method ignores the offset and count parameters and sets the Offset and Count properties to 0.

このメソッドは変更されません、Bufferプロパティ。This method does not change the Buffer property.

こちらもご覧ください

SetBuffer(Byte[], Int32, Int32) SetBuffer(Byte[], Int32, Int32) SetBuffer(Byte[], Int32, Int32) SetBuffer(Byte[], Int32, Int32)

非同期ソケット メソッドで使用するデータ バッファーを設定します。Sets the data buffer to use with an asynchronous socket method.

public:
 void SetBuffer(cli::array <System::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)

パラメーター

buffer
Byte[]

非同期ソケット メソッドで使用するデータ バッファー。The data buffer to use with an asynchronous socket method.

offset
Int32 Int32 Int32 Int32

操作を開始するデータ バッファーのオフセット (バイト単位)。The offset, in bytes, in the data buffer where the operation starts.

count
Int32 Int32 Int32 Int32

バッファー内で送信または受信するデータの最大量 (バイト単位)。The maximum amount of data, in bytes, to send or receive in the buffer.

例外

あいまいなバッファーが指定されています。There are ambiguous buffers specified. この例外は、Buffer プロパティが null ではなく、BufferList プロパティも null ではない場合に発生します。This exception occurs if the Buffer property is also not null and the BufferList property is also not null.

引数が範囲外です。An argument was out of range. この例外は、offset パラメーターがゼロ未満であるか、Buffer プロパティの配列の長さよりも大きい場合に発生します。This exception occurs if the offset parameter is less than zero or greater than the length of the array in the Buffer property. また、count パラメーターがゼロ未満であるか、Buffer プロパティの配列の長さから offset パラメーターを引いた長さよりも大きい場合にも、この例外が発生します。This exception also occurs if the count parameter is less than zero or greater than the length of the array in the Buffer property minus the offset parameter.

次のコード例は、分割およびに割り当て可能な 1 つの大きなバッファーを作成します。 [SetBuffer メソッド (バイト<xref:System.Net.Sockets.SocketAsyncEventArgs > ソケット I/O 操作のそれぞれで使用するためのオブジェクト。The following code example creates a single large buffer which can be divided up and assigned to [SetBuffer Method (Byte<xref:System.Net.Sockets.SocketAsyncEventArgs> objects for use with each socket I/O operation. これにより、バッファーを簡単に再利用して、ヒープ メモリの断片化を防ぐ。This enables buffers to be easily reused and guards against fragmenting heap memory.

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

}

注釈

offsetcountパラメーターが負の数値にすることはできません。The offset and count parameters can't be negative numbers. 組み合わせ、offsetcountパラメーターはデータ配列の境界である必要があります、bufferパラメーター。The combination of the offset and count parameters must be in bounds of the data array in the buffer parameter.

このメソッドは、設定、[SetBuffer メソッド (バイト<xref:System.Net.Sockets.SocketAsyncEventArgs.Buffer%2A > プロパティをbufferパラメーター、[SetBuffer メソッド (バイト<xref:System.Net.Sockets.SocketAsyncEventArgs.Count%2A > プロパティをcountパラメーター、および [SetBuffer メソッド (バイト<xref:System.Net.Sockets.SocketAsyncEventArgs.Offset%2A > プロパティをoffsetパラメーター。This method sets the [SetBuffer Method (Byte<xref:System.Net.Sockets.SocketAsyncEventArgs.Buffer%2A> property to the buffer parameter, the [SetBuffer Method (Byte<xref:System.Net.Sockets.SocketAsyncEventArgs.Count%2A> property to the count parameter, and the [SetBuffer Method (Byte<xref:System.Net.Sockets.SocketAsyncEventArgs.Offset%2A> property to the offset parameter.

こちらもご覧ください

適用対象