PinnedMemory é uma solução multiplataforma e de alto desempenho para criar, acessar e gerenciar memória fixada e bloqueada para sistemas operacionais Windows, macOS e Linux no .NET Core. Ele fornece fixação automática de memória e bloqueio opcional para operações confidenciais, ajudando a evitar realocações de coleta de lixo e oferecendo desempenho aprimorado em cenários de manipulação de memória de baixo nível.
Em um prompt de comando:
dotnet adicionar pacote PinnedMemory
Instalar pacote PinnedMemory
Você também pode pesquisar o pacote por meio da IU do NuGet ou do site:
NuGet: memória fixada
Gerenciamento de memória multiplataforma para Windows, Linux e macOS.
Suporta vários tipos primitivos (por exemplo, byte
, int
, float
, etc.).
Oferece zeragem, bloqueio e desbloqueio de memória para segurança e desempenho.
Impede que a coleta de lixo realoque a memória fixando a matriz na memória.
Clonagem e pooling eficientes de arrays usando ArrayPool<T>
.
Otimizado para desempenho com inlining agressivo e alocações reduzidas.
usando (var pin = new PinnedMemory<byte>(new byte[3])){pin[0] = 65;pin[1] = 61;pin[2] = 77;}
usando (var pin = new PinnedMemory<byte>(new byte[3])){pin.Write(0, 65);pin.Write(1, 61);pin.Write(2, 77);}
usando (var pin = new PinnedMemory<byte>(new byte[] {65, 61, 77}, false)){var byte1 = pin[0];var byte2 = pin[1];var byte3 = pin[2] ;}
usando (var pin = new PinnedMemory<byte>(new byte[] {65, 61, 77}, false)){var byte1 = pin.Read(0);var byte2 = pin.Read(1);var byte3 = pino.Leia(2);}
usando (var pin = new PinnedMemory<byte>(new byte[] {65, 61, 77}, false)){var clone = pin.Clone();var clonedArray = clone.ToArray();}
using (var pin = new PinnedMemory<byte>(new byte[3], zero: true, bloqueado: true)){// A memória é automaticamente zerada e bloqueada. // Execute operações seguras.}
Os seguintes tipos primitivos são suportados em PinnedMemory
:
sbyte
byte
char
short
ushort
int
uint
long
ulong
float
double
decimal
bool
PinnedMemory (valor T [], bool zero = verdadeiro, bool bloqueado = verdadeiro, tipo SystemType = SystemType.Unknown)
valor : a matriz a ser fixada na memória.
zero : Opcional. Se true
, a memória será zerada após a alocação.
bloqueado : Opcional. Se true
, a memória será bloqueada na RAM para evitar paginação.
tipo : opcional. Especifica a plataforma do sistema operacional ( SystemType.Windows
, SystemType.Linux
, SystemType.Osx
). Se Unknown
, ele será detectado automaticamente.
T this[int i] : Indexador para acessar elementos no array fixado.
int Length : Retorna o comprimento da matriz fixada.
T[] Read() : Retorna todo o array fixado.
T Read(int index) : Lê o valor no índice especificado.
void Write(int index, T value) : Grava o valor no índice especificado.
PinnedMemory Clone() : Clona o array de memória fixada e retorna um novo objeto PinnedMemory<T>
.
T[] ToArray() : Retorna uma cópia da memória fixada como um array.
void Dispose() : libera a memória fixada, zera-a e desbloqueia-a se estiver bloqueada.
Esta biblioteca está licenciada sob a licença MIT.