SocketAsyncEventArgs.SetBuffer Methode
Definitie
Belangrijk
Bepaalde informatie heeft betrekking op een voorlopige productversie die aanzienlijk kan worden gewijzigd voordat deze wordt uitgebracht. Microsoft biedt geen enkele expliciete of impliciete garanties met betrekking tot de informatie die hier wordt verstrekt.
Initialiseert de gegevensbuffer voor gebruik met een asynchrone socketmethode.
Overloads
| Name | Description |
|---|---|
| SetBuffer(Memory<Byte>) |
Hiermee stelt u het geheugengebied in dat moet worden gebruikt als buffer met een asynchrone socketmethode. |
| SetBuffer(Int32, Int32) |
Hiermee stelt u de gegevensbuffer in voor gebruik met een asynchrone socketmethode. |
| SetBuffer(Byte[], Int32, Int32) |
Hiermee stelt u de gegevensbuffer in voor gebruik met een asynchrone socketmethode. |
Opmerkingen
Met deze methode wordt de Buffer eigenschap ingesteld op null en de Count eigenschappen op Offset nul.
SetBuffer(Memory<Byte>)
Hiermee stelt u het geheugengebied in dat moet worden gebruikt als buffer met een asynchrone socketmethode.
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))
Parameters
Het geheugengebied dat moet worden gebruikt als buffer met een asynchrone socketmethode.
Opmerkingen
Met deze methode wordt de MemoryBuffer eigenschap ingesteld op de buffer parameter, de Count eigenschap op de buffer lengte en de Offset eigenschap op nul.
Van toepassing op
SetBuffer(Int32, Int32)
Hiermee stelt u de gegevensbuffer in voor gebruik met een asynchrone socketmethode.
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)
Parameters
- offset
- Int32
De offset, in bytes, in de gegevensbuffer waar de bewerking wordt gestart.
- count
- Int32
De maximale hoeveelheid gegevens, in bytes, die in de buffer moet worden verzonden of ontvangen.
Uitzonderingen
Een argument ligt buiten het bereik. Deze uitzondering treedt op als de offset parameter kleiner is dan nul of groter is dan de lengte van de matrix in de Buffer eigenschap. Deze uitzondering treedt ook op als de count parameter kleiner is dan nul of groter is dan de lengte van de matrix in de Buffer eigenschap min de offset parameter.
Opmerkingen
De offset en count parameters kunnen geen negatieve getallen zijn. De combinatie van de offset en count parameters moet zich in de grenzen van de buffermatrix in de Buffer eigenschap bevinden.
Met deze methode wordt de Count eigenschap ingesteld op de count parameter en de Offset eigenschap op de offset parameter. Als de Buffer eigenschap null is, negeert deze methode de offset en count parameters en stelt u de Offset en Count eigenschappen in op 0.
Met deze methode wordt de Buffer eigenschap niet gewijzigd.
Zie ook
Van toepassing op
SetBuffer(Byte[], Int32, Int32)
Hiermee stelt u de gegevensbuffer in voor gebruik met een asynchrone socketmethode.
public:
void SetBuffer(cli::array <System::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)
Parameters
- buffer
- Byte[]
De gegevensbuffer die moet worden gebruikt met een asynchrone socketmethode.
- offset
- Int32
De offset, in bytes, in de gegevensbuffer waar de bewerking wordt gestart.
- count
- Int32
De maximale hoeveelheid gegevens, in bytes, die in de buffer moet worden verzonden of ontvangen.
Uitzonderingen
Er zijn dubbelzinnige buffers opgegeven. Deze uitzondering treedt op als de Buffer eigenschap ook niet null is en de BufferList eigenschap ook niet null is.
Een argument ligt buiten het bereik. Deze uitzondering treedt op als de offset parameter kleiner is dan nul of groter is dan de lengte van de matrix in de Buffer eigenschap. Deze uitzondering treedt ook op als de count parameter kleiner is dan nul of groter is dan de lengte van de matrix in de Buffer eigenschap min de offset parameter.
Voorbeelden
In het volgende codevoorbeeld wordt één grote buffer gemaakt die kan worden verdeeld en toegewezen aan SocketAsyncEventArgs objecten voor gebruik met elke socket-I/O-bewerking. Hierdoor kunnen buffers eenvoudig opnieuw worden gebruikt en worden beschermd tegen fragmenterend heap-geheugen.
// 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);
}
}
Opmerkingen
De offset en count parameters kunnen geen negatieve getallen zijn. De combinatie van de offset en count parameters moet zich in de grenzen van de gegevensmatrix in de buffer parameter bevinden.
Met deze methode wordt de Buffer eigenschap ingesteld op de buffer parameter, de Count eigenschap op de count parameter en de Offset eigenschap op de offset parameter.