SocketAsyncEventArgs.SetBuffer Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
Inicializuje datovou vyrovnávací paměť, která se použije s asynchronní metodou soketu.
Přetížení
| Name | Description |
|---|---|
| SetBuffer(Memory<Byte>) |
Nastaví oblast paměti, která se má použít jako vyrovnávací paměť s asynchronní metodou soketu. |
| SetBuffer(Int32, Int32) |
Nastaví vyrovnávací paměť dat tak, aby se používala s asynchronní metodou soketu. |
| SetBuffer(Byte[], Int32, Int32) |
Nastaví vyrovnávací paměť dat tak, aby se používala s asynchronní metodou soketu. |
Poznámky
Tato metoda nastaví Buffer vlastnost na hodnotu null a vlastnosti Offset na nuluCount.
SetBuffer(Memory<Byte>)
- Zdroj:
- SocketAsyncEventArgs.cs
- Zdroj:
- SocketAsyncEventArgs.cs
- Zdroj:
- SocketAsyncEventArgs.cs
- Zdroj:
- SocketAsyncEventArgs.cs
- Zdroj:
- SocketAsyncEventArgs.cs
Nastaví oblast paměti, která se má použít jako vyrovnávací paměť s asynchronní metodou soketu.
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))
Parametry
Oblast paměti, která se má použít jako vyrovnávací paměť s asynchronní metodou soketu.
Poznámky
Tato metoda nastaví MemoryBuffer vlastnost na buffer parametr, Count vlastnost na délku buffer a vlastnost na nulu Offset .
Platí pro
SetBuffer(Int32, Int32)
- Zdroj:
- SocketAsyncEventArgs.cs
- Zdroj:
- SocketAsyncEventArgs.cs
- Zdroj:
- SocketAsyncEventArgs.cs
- Zdroj:
- SocketAsyncEventArgs.cs
- Zdroj:
- SocketAsyncEventArgs.cs
Nastaví vyrovnávací paměť dat tak, aby se používala s asynchronní metodou soketu.
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)
Parametry
- offset
- Int32
Posun v bajtech ve vyrovnávací paměti dat, kde se operace spouští.
- count
- Int32
Maximální množství dat v bajtech pro odesílání nebo příjem v vyrovnávací paměti.
Výjimky
Argument byl mimo rozsah. K této výjimce dochází, pokud offset je parametr menší než nula nebo větší než délka pole ve Buffer vlastnosti. K této výjimce dochází také v případě, že count parametr je menší než nula nebo větší než délka pole ve Buffer vlastnosti minus offset parametr.
Poznámky
count Parametry offset nemohou být záporná čísla.
offset Kombinace parametrů a count parametrů musí být v mezích pole vyrovnávací paměti ve Buffer vlastnosti.
Tato metoda nastaví Count vlastnost na count parametr a Offset vlastnost na offset parametr.
Buffer Pokud je vlastnost null, tato metoda ignoruje offset a count parametry a nastaví Offset a Count vlastnosti na 0.
Tato metoda nemění Buffer vlastnost.
Viz také
Platí pro
SetBuffer(Byte[], Int32, Int32)
- Zdroj:
- SocketAsyncEventArgs.cs
- Zdroj:
- SocketAsyncEventArgs.cs
- Zdroj:
- SocketAsyncEventArgs.cs
- Zdroj:
- SocketAsyncEventArgs.cs
- Zdroj:
- SocketAsyncEventArgs.cs
Nastaví vyrovnávací paměť dat tak, aby se používala s asynchronní metodou soketu.
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)
Parametry
- buffer
- Byte[]
Datová vyrovnávací paměť, která se má použít s asynchronní metodou soketu.
- offset
- Int32
Posun v bajtech ve vyrovnávací paměti dat, kde se operace spouští.
- count
- Int32
Maximální množství dat v bajtech pro odesílání nebo příjem v vyrovnávací paměti.
Výjimky
Jsou zadány nejednoznačné vyrovnávací paměti. K této výjimce dochází, pokud Buffer vlastnost není také null a BufferList vlastnost není null.
Argument byl mimo rozsah. K této výjimce dochází, pokud offset je parametr menší než nula nebo větší než délka pole ve Buffer vlastnosti. K této výjimce dochází také v případě, že count parametr je menší než nula nebo větší než délka pole ve Buffer vlastnosti minus offset parametr.
Příklady
Následující příklad kódu vytvoří jednu velkou vyrovnávací paměť, kterou lze rozdělit a přiřadit k SocketAsyncEventArgs objektům pro použití s každou vstupně-výstupní operací soketu. To umožňuje snadné opakované použití vyrovnávacích pamětí a ochranu před fragmentováním paměti haldy.
// 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);
}
}
Poznámky
count Parametry offset nemohou být záporná čísla.
offset Kombinace parametrů a count parametrů musí být v mezích datového pole v parametrubuffer.
Tato metoda nastaví Buffer vlastnost na buffer parametr, Count vlastnost na count parametr a Offset vlastnost na offset parametr.