SocketAsyncEventArgs.SetBuffer Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
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
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