SocketAsyncEventArgs.SetBuffer Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Zaman uyumsuz bir yuva yöntemiyle kullanılacak veri arabelleği başlatır.
Aşırı Yüklemeler
| Name | Description |
|---|---|
| SetBuffer(Memory<Byte>) |
Zaman uyumsuz yuva yöntemiyle arabellek olarak kullanılacak bellek bölgesini ayarlar. |
| SetBuffer(Int32, Int32) |
Zaman uyumsuz bir yuva yöntemiyle kullanılacak veri arabelleği ayarlar. |
| SetBuffer(Byte[], Int32, Int32) |
Zaman uyumsuz bir yuva yöntemiyle kullanılacak veri arabelleği ayarlar. |
Açıklamalar
Bu yöntem, özelliğini null ve Buffer ve Count özelliklerini sıfır olarak ayarlarOffset.
SetBuffer(Memory<Byte>)
- Kaynak:
- SocketAsyncEventArgs.cs
- Kaynak:
- SocketAsyncEventArgs.cs
- Kaynak:
- SocketAsyncEventArgs.cs
- Kaynak:
- SocketAsyncEventArgs.cs
- Kaynak:
- SocketAsyncEventArgs.cs
Zaman uyumsuz yuva yöntemiyle arabellek olarak kullanılacak bellek bölgesini ayarlar.
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))
Parametreler
Açıklamalar
Bu yöntem özelliği parametresine, özelliği uzunluğuna MemoryBuffer ve buffer özelliği sıfır olarak ayarlarCount.bufferOffset
Şunlara uygulanır
SetBuffer(Int32, Int32)
- Kaynak:
- SocketAsyncEventArgs.cs
- Kaynak:
- SocketAsyncEventArgs.cs
- Kaynak:
- SocketAsyncEventArgs.cs
- Kaynak:
- SocketAsyncEventArgs.cs
- Kaynak:
- SocketAsyncEventArgs.cs
Zaman uyumsuz bir yuva yöntemiyle kullanılacak veri arabelleği ayarlar.
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)
Parametreler
- offset
- Int32
İşlemin başladığı veri arabelleğindeki bayt cinsinden uzaklık.
- count
- Int32
Arabellekte gönderilecek veya alınacak bayt cinsinden maksimum veri miktarı.
Özel durumlar
Bir bağımsız değişken aralık dışındaydı. Bu özel durum, parametre sıfırdan küçükse veya özelliğindeki offset dizinin uzunluğundan büyükse Buffer oluşur. Bu özel durum, parametresi sıfırdan küçükse veya özelliğindeki dizinin count uzunluğundan büyükse Buffer ve parametresi çıkarılırsa offset da oluşur.
Açıklamalar
offset ve count parametreleri negatif sayılar olamaz. ve offset parametrelerinin count birleşimi, özelliğindeki arabellek dizisinin sınırlarında Buffer olmalıdır.
Bu yöntem, özelliğini parametresineCount, özelliğini parametresine countOffset ayarlaroffset.
Buffer Özellik null ise, bu yöntem ve offset parametrelerini yoksayar count ve ve Offset özelliklerini 0 olarak ayarlarCount.
Bu yöntem özelliğini değiştirmez Buffer .
Ayrıca bkz.
Şunlara uygulanır
SetBuffer(Byte[], Int32, Int32)
- Kaynak:
- SocketAsyncEventArgs.cs
- Kaynak:
- SocketAsyncEventArgs.cs
- Kaynak:
- SocketAsyncEventArgs.cs
- Kaynak:
- SocketAsyncEventArgs.cs
- Kaynak:
- SocketAsyncEventArgs.cs
Zaman uyumsuz bir yuva yöntemiyle kullanılacak veri arabelleği ayarlar.
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)
Parametreler
- buffer
- Byte[]
Zaman uyumsuz bir yuva yöntemiyle kullanılacak veri arabelleği.
- offset
- Int32
İşlemin başladığı veri arabelleğindeki bayt cinsinden uzaklık.
- count
- Int32
Arabellekte gönderilecek veya alınacak bayt cinsinden maksimum veri miktarı.
Özel durumlar
Belirsiz arabellekler belirtildi. Özellik de null değilse Buffer ve BufferList özellik de null değilse bu özel durum oluşur.
Bir bağımsız değişken aralık dışındaydı. Bu özel durum, parametre sıfırdan küçükse veya özelliğindeki offset dizinin uzunluğundan büyükse Buffer oluşur. Bu özel durum, parametresi sıfırdan küçükse veya özelliğindeki dizinin count uzunluğundan büyükse Buffer ve parametresi çıkarılırsa offset da oluşur.
Örnekler
Aşağıdaki kod örneği, her yuva G/Ç işlemiyle kullanılmak üzere bölünebilen ve nesnelere SocketAsyncEventArgs atanabilen tek bir büyük arabellek oluşturur. Bu, arabelleklerin kolayca yeniden kullanılmasını sağlar ve parçalanan yığın belleğine karşı koruma sağlar.
// 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);
}
}
Açıklamalar
offset ve count parametreleri negatif sayılar olamaz. ve offset parametrelerinin count birleşimi, parametredeki veri dizisinin sınırlarında buffer olmalıdır.
Bu yöntem özelliği parametresine, özelliği parametresine Buffer ve buffer özelliği parametresine Count ayarlarcount.Offsetoffset