SocketAsyncEventArgs.SetBuffer Metódus

Definíció

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

buffer
Memory<Byte>

A pufferként használandó memóriaterület aszinkron szoftvercsatorna-metódussal.

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 .

Lásd még

A következőre érvényes: