SocketAsyncEventArgs.SetBuffer Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Inicializálja az adatpuffert az aszinkron szoftvercsatorna-metódussal való használathoz.
Túlterhelések
| Name | Description |
|---|---|
| SetBuffer(Memory<Byte>) |
A memóriaterületet pufferként, aszinkron szoftvercsatorna-módszerrel állítja be. |
| SetBuffer(Int32, Int32) |
Beállítja az adatpuffert aszinkron szoftvercsatorna-metódussal való használatra. |
| SetBuffer(Byte[], Int32, Int32) |
Beállítja az adatpuffert aszinkron szoftvercsatorna-metódussal való használatra. |
Megjegyzések
Ez a metódus null értékűre állítja a Buffer tulajdonságot, a Count tulajdonságokat pedig Offset nullára.
SetBuffer(Memory<Byte>)
A memóriaterületet pufferként, aszinkron szoftvercsatorna-módszerrel állítja be.
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éterek
Megjegyzések
Ez a metódus a MemoryBuffer tulajdonságot a buffer paraméterre, a Count tulajdonságot a buffer hosszra, a Offset tulajdonságot pedig nulla értékre állítja.
A következőre érvényes:
SetBuffer(Int32, Int32)
Beállítja az adatpuffert aszinkron szoftvercsatorna-metódussal való használatra.
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éterek
- offset
- Int32
Az eltolás bájtban abban az adatpufferben, ahol a művelet elindul.
- count
- Int32
A pufferben küldendő vagy fogadott adatok maximális mennyisége bájtban.
Kivételek
Egy argumentum túllépte a tartományt. Ez a kivétel akkor fordul elő, ha a offset paraméter kisebb, mint nulla vagy nagyobb, mint a tömb hossza a Buffer tulajdonságban. Ez a kivétel akkor is előfordul, ha a count paraméter kisebb, mint nulla vagy nagyobb, mint a tömb hossza a tulajdonságban, Buffer mínusz a offset paraméter.
Megjegyzések
A offset paraméterek nem count lehetnek negatív számok. A paraméterek és count a offset paraméterek kombinációjának a tulajdonság puffertömbjének határában Buffer kell lennie.
Ez a metódus a Count tulajdonságot a count paraméterre, a tulajdonságot pedig Offset a paraméterre állítja offset . Ha a tulajdonság null, ez a Buffer metódus figyelmen kívül hagyja a paramétereket és count a offset tulajdonságokat 0 értékre állítja OffsetCount.
Ez a metódus nem módosítja a tulajdonságot Buffer .
Lásd még
A következőre érvényes:
SetBuffer(Byte[], Int32, Int32)
Beállítja az adatpuffert aszinkron szoftvercsatorna-metódussal való használatra.
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)
Paraméterek
- buffer
- Byte[]
Az aszinkron szoftvercsatorna-metódussal használandó adatpuffer.
- offset
- Int32
Az eltolás bájtban abban az adatpufferben, ahol a művelet elindul.
- count
- Int32
A pufferben küldendő vagy fogadott adatok maximális mennyisége bájtban.
Kivételek
Nem egyértelmű pufferek vannak megadva. Ez a kivétel akkor fordul elő, ha a Buffer tulajdonság szintén nem null értékű, és a BufferList tulajdonság szintén nem null.
Egy argumentum túllépte a tartományt. Ez a kivétel akkor fordul elő, ha a offset paraméter kisebb, mint nulla vagy nagyobb, mint a tömb hossza a Buffer tulajdonságban. Ez a kivétel akkor is előfordul, ha a count paraméter kisebb, mint nulla vagy nagyobb, mint a tömb hossza a tulajdonságban, Buffer mínusz a offset paraméter.
Példák
Az alábbi példakód egyetlen nagy puffert hoz létre, amely felosztható és hozzárendelhető az objektumokhoz SocketAsyncEventArgs az egyes szoftvercsatornák I/O-műveleteihez való használatra. Ez lehetővé teszi a pufferek egyszerű újrafelhasználását, és védi a töredezett halommemória ellen.
// 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);
}
}
Megjegyzések
A offset paraméterek nem count lehetnek negatív számok. A paraméterek és count a offset paraméterek kombinációjának a paraméter adattömbjében buffer kell lennie.
Ez a metódus a Buffer tulajdonságot a buffer paraméterre, a Count tulajdonságot a count paraméterre, a tulajdonságot Offset pedig a paraméterre állítja offset .