SocketAsyncEventArgs.SetBuffer Methode
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Initialisiert den Datenpuffer, der mit einer asynchronen Socketmethode verwendet werden soll.
Überlädt
SetBuffer(Memory<Byte>) |
Legt den Arbeitsspeicherbereich fest, der als Puffer mit einer asynchronen Socketmethode verwendet werden soll. |
SetBuffer(Int32, Int32) |
Legt den Datenpuffer fest, der mit einer asynchronen Socketmethode verwendet werden soll. |
SetBuffer(Byte[], Int32, Int32) |
Legt den Datenpuffer fest, der mit einer asynchronen Socketmethode verwendet werden soll. |
Hinweise
Diese Methode legt die Buffer -Eigenschaft auf NULL und die Count Eigenschaften und Offset auf 0 (null) fest.
SetBuffer(Memory<Byte>)
- Quelle:
- SocketAsyncEventArgs.cs
- Quelle:
- SocketAsyncEventArgs.cs
- Quelle:
- SocketAsyncEventArgs.cs
Legt den Arbeitsspeicherbereich fest, der als Puffer mit einer asynchronen Socketmethode verwendet werden soll.
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
Der Arbeitsspeicherbereich, der als Puffer mit einer asynchronen Socketmethode verwendet werden soll.
Hinweise
Diese Methode legt die MemoryBuffer -Eigenschaft auf den buffer
-Parameter, die Count -Eigenschaft auf die buffer
Länge und die Offset -Eigenschaft auf 0 (null) fest.
Gilt für:
SetBuffer(Int32, Int32)
- Quelle:
- SocketAsyncEventArgs.cs
- Quelle:
- SocketAsyncEventArgs.cs
- Quelle:
- SocketAsyncEventArgs.cs
Legt den Datenpuffer fest, der mit einer asynchronen Socketmethode verwendet werden soll.
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
Der Offset (in Bytes) im Datenpuffer, in dem der Vorgang beginnt.
- count
- Int32
Die maximale Datenmenge in Bytes, die im Puffer gesendet oder empfangen werden soll.
Ausnahmen
Ein Argument lag außerhalb des gültigen Bereichs. Diese Ausnahme tritt auf, wenn der offset
-Parameter kleiner als 0 (null) oder größer als die Länge des Arrays in der Buffer-Eigenschaft ist. Diese Ausnahme tritt außerdem auf, wenn der count
-Parameter kleiner als 0 (null) oder größer als die Länge des Arrays in der Buffer-Eigenschaft abzüglich des offset
-Parameters ist.
Hinweise
Die offset
Parameter und count
dürfen keine negativen Zahlen sein. Die Kombination der offset
Parameter und count
muss sich in den Grenzen des Pufferarrays in der Buffer -Eigenschaft befinden.
Diese Methode legt die Count -Eigenschaft auf den count
-Parameter und die Offset -Eigenschaft auf den offset
-Parameter fest. Wenn die Buffer Eigenschaft NULL ist, ignoriert diese Methode die offset
Parameter und count
und legt die Offset Eigenschaften und Count auf 0 fest.
Diese Methode ändert die Buffer -Eigenschaft nicht.
Weitere Informationen
Gilt für:
SetBuffer(Byte[], Int32, Int32)
- Quelle:
- SocketAsyncEventArgs.cs
- Quelle:
- SocketAsyncEventArgs.cs
- Quelle:
- SocketAsyncEventArgs.cs
Legt den Datenpuffer fest, der mit einer asynchronen Socketmethode verwendet werden soll.
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[]
Der Datenpuffer, der mit einer asynchronen Socketmethode verwendet werden soll.
- offset
- Int32
Der Offset (in Bytes) im Datenpuffer, in dem der Vorgang beginnt.
- count
- Int32
Die maximale Datenmenge in Bytes, die im Puffer gesendet oder empfangen werden soll.
Ausnahmen
Es wurden mehrdeutige Puffer angegeben. Diese Ausnahme tritt auf, wenn die Buffer-Eigenschaft nicht NULL ist und die BufferList-Eigenschaft ebenfalls nicht NULL ist.
Ein Argument lag außerhalb des gültigen Bereichs. Diese Ausnahme tritt auf, wenn der offset
-Parameter kleiner als 0 (null) oder größer als die Länge des Arrays in der Buffer-Eigenschaft ist. Diese Ausnahme tritt außerdem auf, wenn der count
-Parameter kleiner als 0 (null) oder größer als die Länge des Arrays in der Buffer-Eigenschaft abzüglich des offset
-Parameters ist.
Beispiele
Im folgenden Codebeispiel wird ein einzelner großer Puffer erstellt, der aufgeteilt und Objekten zur Verwendung mit jedem Socket-E/A-Vorgang zugewiesen SocketAsyncEventArgs werden kann. Dies ermöglicht die einfache Wiederverwendung von Puffern und schützt vor fragmentiertem Heapspeicher.
// 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);
}
}
Hinweise
Die offset
Parameter und count
dürfen keine negativen Zahlen sein. Die Kombination der offset
Parameter und count
muss sich in den Grenzen des Datenarrays im buffer
Parameter befindet.
Diese Methode legt die Buffer -Eigenschaft auf den buffer
-Parameter, die Count -Eigenschaft auf den count
-Parameter und die Offset -Eigenschaft auf den offset
-Parameter fest.