SocketAsyncEventArgs.SetBuffer Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Выполняет инициализацию буфера данных для применения в асинхронном методе сокета.
Перегрузки
SetBuffer(Memory<Byte>) |
Задает область памяти, используемую в качестве буфера с асинхронным методом сокета. |
SetBuffer(Int32, Int32) |
Задает буфер данных для применения в асинхронном методе сокета. |
SetBuffer(Byte[], Int32, Int32) |
Задает буфер данных для применения в асинхронном методе сокета. |
Комментарии
Этот метод задает Buffer для свойства значение NULL, а Count для свойств и Offset — нулевое значение.
SetBuffer(Memory<Byte>)
- Исходный код:
- SocketAsyncEventArgs.cs
- Исходный код:
- SocketAsyncEventArgs.cs
- Исходный код:
- SocketAsyncEventArgs.cs
Задает область памяти, используемую в качестве буфера с асинхронным методом сокета.
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))
Параметры
Комментарии
Этот метод задает MemoryBuffer для свойства buffer
значение параметра , для Count свойства — длину buffer
, а для Offset свойства — нулевое значение.
Применяется к
SetBuffer(Int32, Int32)
- Исходный код:
- SocketAsyncEventArgs.cs
- Исходный код:
- SocketAsyncEventArgs.cs
- Исходный код:
- SocketAsyncEventArgs.cs
Задает буфер данных для применения в асинхронном методе сокета.
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
Смещение (в байтах) в буфере данных, при котором начинается операция.
- count
- Int32
Максимальное количество данных (в байтах), которое может быть отправлено или получено в буфере.
Исключения
Аргумент вне диапазона. Это исключение возникает, если значение параметра offset
меньше нуля или больше длины массива, указанной в свойстве Buffer. Это исключение возникает также, если значение параметра count
меньше нуля или больше разницы между длиной массива, указанной в свойстве Buffer, и значением параметра offset
.
Комментарии
Параметры offset
и count
не могут быть отрицательными числами. Сочетание offset
параметров и count
должно находиться в границах буферного массива в свойстве Buffer .
Этот метод задает свойству Count значение параметра , count
а свойству Offset — параметр .offset
Buffer Если свойство имеет значение NULL, этот метод игнорирует offset
параметры и count
и устанавливает Offset для свойств и Count значение 0.
Этот метод не изменяет Buffer свойство .
См. также раздел
Применяется к
SetBuffer(Byte[], Int32, Int32)
- Исходный код:
- SocketAsyncEventArgs.cs
- Исходный код:
- SocketAsyncEventArgs.cs
- Исходный код:
- SocketAsyncEventArgs.cs
Задает буфер данных для применения в асинхронном методе сокета.
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)
Параметры
- buffer
- Byte[]
Буфер данных для применения в асинхронном методе сокета.
- offset
- Int32
Смещение (в байтах) в буфере данных, при котором начинается операция.
- count
- Int32
Максимальное количество данных (в байтах), которое может быть отправлено или получено в буфере.
Исключения
Неоднозначное указание буферов. Это исключение возникает, если значения свойств Buffer и BufferList одновременно отличны от null.
Аргумент вне диапазона. Это исключение возникает, если значение параметра offset
меньше нуля или больше длины массива, указанной в свойстве Buffer. Это исключение возникает также, если значение параметра count
меньше нуля или больше разницы между длиной массива, указанной в свойстве Buffer, и значением параметра offset
.
Примеры
В следующем примере кода создается один большой буфер, который можно разделить и назначить SocketAsyncEventArgs объектам для использования с каждой операцией ввода-вывода сокета. Это позволяет легко повторно использовать буферы и защищает от фрагментирования памяти кучи.
// 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);
}
}
Комментарии
Параметры offset
и count
не могут быть отрицательными числами. Сочетание offset
параметров и count
должно находиться в границах массива данных в параметре buffer
.
Этот метод задает Buffer для свойства buffer
значение параметра , для Count свойства — count
параметр , а для Offset свойства — для offset
параметра .