SocketAsyncEventArgs.SetBuffer Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Initialise la mémoire tampon de données à utiliser avec une méthode de socket asynchrone.
Surcharges
SetBuffer(Memory<Byte>) |
Définit la zone de mémoire à utiliser comme mémoire tampon avec une méthode de socket asynchrone. |
SetBuffer(Int32, Int32) |
Définit la mémoire tampon de données à utiliser avec une méthode de socket asynchrone. |
SetBuffer(Byte[], Int32, Int32) |
Définit la mémoire tampon de données à utiliser avec une méthode de socket asynchrone. |
Remarques
Cette méthode définit la propriété sur Buffer null et les Count propriétés et Offset sur zéro.
SetBuffer(Memory<Byte>)
- Source:
- SocketAsyncEventArgs.cs
- Source:
- SocketAsyncEventArgs.cs
- Source:
- SocketAsyncEventArgs.cs
Définit la zone de mémoire à utiliser comme mémoire tampon avec une méthode de socket asynchrone.
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))
Paramètres
Zone de mémoire à utiliser comme mémoire tampon avec une méthode de socket asynchrone.
Remarques
Cette méthode définit la MemoryBuffer propriété sur le buffer
paramètre, la Count propriété sur la buffer
longueur et la Offset propriété sur zéro.
S’applique à
SetBuffer(Int32, Int32)
- Source:
- SocketAsyncEventArgs.cs
- Source:
- SocketAsyncEventArgs.cs
- Source:
- SocketAsyncEventArgs.cs
Définit la mémoire tampon de données à utiliser avec une méthode de socket asynchrone.
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)
Paramètres
- offset
- Int32
Offset, en octets, dans la mémoire tampon de données où l'opération démarre.
- count
- Int32
Quantité maximale de données, en octets, à envoyer ou à recevoir dans la mémoire tampon.
Exceptions
Un argument est hors limites. Cette exception se produit si le paramètre offset
est inférieur à zéro ou supérieur à la longueur du tableau dans la propriété Buffer. Cette exception se produit également si le paramètre count
est inférieur à zéro ou supérieur à la longueur du tableau dans la propriété Buffer moins le paramètre offset
.
Remarques
Les offset
paramètres et count
ne peuvent pas être des nombres négatifs. La combinaison des offset
paramètres et count
doit être dans les limites du tableau de mémoire tampon dans la Buffer propriété .
Cette méthode définit la Count propriété sur le count
paramètre et la Offset propriété sur le offset
paramètre . Si la propriété a la Buffer valeur null, cette méthode ignore les offset
paramètres et count
et définit les Offset propriétés et Count sur 0.
Cette méthode ne modifie pas la Buffer propriété.
Voir aussi
S’applique à
SetBuffer(Byte[], Int32, Int32)
- Source:
- SocketAsyncEventArgs.cs
- Source:
- SocketAsyncEventArgs.cs
- Source:
- SocketAsyncEventArgs.cs
Définit la mémoire tampon de données à utiliser avec une méthode de socket asynchrone.
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)
Paramètres
- buffer
- Byte[]
Mémoire tampon de données à utiliser avec une méthode de socket asynchrone.
- offset
- Int32
Offset, en octets, dans la mémoire tampon de données où l'opération démarre.
- count
- Int32
Quantité maximale de données, en octets, à envoyer ou à recevoir dans la mémoire tampon.
Exceptions
Des mémoires tampons ambiguës sont spécifiées. Cette exception se produit si la valeur des propriétés Buffer et BufferList n'est pas Null.
Un argument est hors limites. Cette exception se produit si le paramètre offset
est inférieur à zéro ou supérieur à la longueur du tableau dans la propriété Buffer. Cette exception se produit également si le paramètre count
est inférieur à zéro ou supérieur à la longueur du tableau dans la propriété Buffer moins le paramètre offset
.
Exemples
L’exemple de code suivant crée une mémoire tampon volumineuse unique qui peut être divisée et affectée à des objets pour SocketAsyncEventArgs une utilisation avec chaque opération d’E/S de socket. Cela permet aux mémoires tampons d’être facilement réutilisées et protège contre la fragmentation de la mémoire mémoire du tas.
// 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);
}
}
Remarques
Les offset
paramètres et count
ne peuvent pas être des nombres négatifs. La combinaison des offset
paramètres et count
doit être dans les limites du tableau de données dans le buffer
paramètre .
Cette méthode définit la Buffer propriété sur le buffer
paramètre, la Count propriété sur le count
paramètre et la Offset propriété sur le offset
paramètre.