SocketAsyncEventArgs.SetBuffer Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Initierar databufferten som ska användas med en asynkron socketmetod.
Överlagringar
| Name | Description |
|---|---|
| SetBuffer(Memory<Byte>) |
Anger den minnesregion som ska användas som en buffert med en asynkron socketmetod. |
| SetBuffer(Int32, Int32) |
Anger vilken databuffert som ska användas med en asynkron socketmetod. |
| SetBuffer(Byte[], Int32, Int32) |
Anger vilken databuffert som ska användas med en asynkron socketmetod. |
Kommentarer
Den här metoden anger Buffer egenskapen till null och Count egenskaperna och Offset till noll.
SetBuffer(Memory<Byte>)
- Källa:
- SocketAsyncEventArgs.cs
- Källa:
- SocketAsyncEventArgs.cs
- Källa:
- SocketAsyncEventArgs.cs
- Källa:
- SocketAsyncEventArgs.cs
- Källa:
- SocketAsyncEventArgs.cs
Anger den minnesregion som ska användas som en buffert med en asynkron socketmetod.
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))
Parametrar
Kommentarer
Den här metoden anger MemoryBuffer egenskapen till parametern buffer , Count egenskapen till buffer längden och Offset egenskapen till noll.
Gäller för
SetBuffer(Int32, Int32)
- Källa:
- SocketAsyncEventArgs.cs
- Källa:
- SocketAsyncEventArgs.cs
- Källa:
- SocketAsyncEventArgs.cs
- Källa:
- SocketAsyncEventArgs.cs
- Källa:
- SocketAsyncEventArgs.cs
Anger vilken databuffert som ska användas med en asynkron socketmetod.
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)
Parametrar
- offset
- Int32
Förskjutningen, i byte, i databufferten där åtgärden startar.
- count
- Int32
Den maximala mängden data, i byte, som ska skickas eller ta emot i bufferten.
Undantag
Ett argument låg utom räckhåll. Det här undantaget inträffar om parametern offset är mindre än noll eller större än matrisens längd i egenskapen Buffer . Det här undantaget inträffar också om parametern count är mindre än noll eller större än matrisens längd i Buffer egenskapen minus parametern offset .
Kommentarer
Parametrarna offset och count får inte vara negativa tal. Kombinationen av parametrarna offset och count måste vara inom gränserna för buffertmatrisen i egenskapen Buffer .
Den här metoden anger Count egenskapen till parametern count och egenskapen Offset till parametern offset . Om egenskapen Buffer är null ignorerar den här metoden parametrarna offset och count anger Offset egenskaperna och Count till 0.
Den här metoden ändrar inte egenskapen Buffer .
Se även
Gäller för
SetBuffer(Byte[], Int32, Int32)
- Källa:
- SocketAsyncEventArgs.cs
- Källa:
- SocketAsyncEventArgs.cs
- Källa:
- SocketAsyncEventArgs.cs
- Källa:
- SocketAsyncEventArgs.cs
- Källa:
- SocketAsyncEventArgs.cs
Anger vilken databuffert som ska användas med en asynkron socketmetod.
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)
Parametrar
- buffer
- Byte[]
Databufferten som ska användas med en asynkron socketmetod.
- offset
- Int32
Förskjutningen, i byte, i databufferten där åtgärden startar.
- count
- Int32
Den maximala mängden data, i byte, som ska skickas eller ta emot i bufferten.
Undantag
Det finns tvetydiga buffertar angivna. Det här undantaget inträffar om egenskapen Buffer inte heller är null och egenskapen BufferList inte heller är null.
Ett argument låg utom räckhåll. Det här undantaget inträffar om parametern offset är mindre än noll eller större än matrisens längd i egenskapen Buffer . Det här undantaget inträffar också om parametern count är mindre än noll eller större än matrisens längd i Buffer egenskapen minus parametern offset .
Exempel
I följande kodexempel skapas en enda stor buffert som kan delas upp och tilldelas objekt SocketAsyncEventArgs för användning med varje socket-I/O-åtgärd. Detta gör att buffertar enkelt kan återanvändas och skyddar mot fragmentering av heapminne.
// 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);
}
}
Kommentarer
Parametrarna offset och count får inte vara negativa tal. Kombinationen av parametrarna offset och count måste vara inom gränserna för datamatrisen i parametern buffer .
Den här metoden anger Buffer egenskapen till parametern buffer , Count egenskapen till parametern count och Offset egenskapen till parametern offset .