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 für die Verwendung mit einer asynchronen Socketmethode.
Überlädt
| Name | Beschreibung |
|---|---|
| SetBuffer(Memory<Byte>) |
Legt den Speicherbereich 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 CountOffset Eigenschaften auf Null fest.
SetBuffer(Memory<Byte>)
- Quelle:
- SocketAsyncEventArgs.cs
- Quelle:
- SocketAsyncEventArgs.cs
- Quelle:
- SocketAsyncEventArgs.cs
- Quelle:
- SocketAsyncEventArgs.cs
- Quelle:
- SocketAsyncEventArgs.cs
Legt den Speicherbereich 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 Speicherbereich, 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 Null fest.
Gilt für:
SetBuffer(Int32, Int32)
- Quelle:
- SocketAsyncEventArgs.cs
- Quelle:
- SocketAsyncEventArgs.cs
- 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 gestartet wird.
- count
- Int32
Die maximale Datenmenge in Bytes, die im Puffer gesendet oder empfangen werden soll.
Ausnahmen
Ein Argument war außerhalb des Zulässigen. Diese Ausnahme tritt auf, wenn der offset Parameter kleiner als null oder größer als die Länge des Arrays in der Buffer Eigenschaft ist. Diese Ausnahme tritt auch auf, wenn der count Parameter kleiner als Null oder größer als die Länge des Arrays in der Buffer Eigenschaft minus dem offset Parameter ist.
Hinweise
Die offset Parameter count können keine negativen Zahlen sein. Die Kombination der Parameter und count der offset Parameter muss sich in der Eigenschaft in grenzen des Pufferarrays Buffer 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 und count die offset Parameter und legt die Offset Eigenschaften 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
- 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 gestartet wird.
- count
- Int32
Die maximale Datenmenge in Bytes, die im Puffer gesendet oder empfangen werden soll.
Ausnahmen
Es sind mehrdeutige Puffer angegeben. Diese Ausnahme tritt auf, wenn die Buffer Eigenschaft auch nicht NULL ist und die BufferList Eigenschaft ebenfalls nicht NULL ist.
Ein Argument war außerhalb des Zulässigen. Diese Ausnahme tritt auf, wenn der offset Parameter kleiner als null oder größer als die Länge des Arrays in der Buffer Eigenschaft ist. Diese Ausnahme tritt auch auf, wenn der count Parameter kleiner als Null oder größer als die Länge des Arrays in der Buffer Eigenschaft minus dem offset Parameter ist.
Beispiele
Im folgenden Codebeispiel wird ein einzelner großer Puffer erstellt, der für jeden Socket-E/A-Vorgang unterteilt und Objekten zugewiesen SocketAsyncEventArgs werden kann. Dadurch können Puffer einfach wiederverwendet und vor fragmentiertem Heapspeicher geschützt werden.
// 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 count können keine negativen Zahlen sein. Die Kombination von und offsetcount Parametern muss sich in Grenzen des Datenarrays im buffer Parameter befinden.
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.