PinnedMemory es una solución multiplataforma de alto rendimiento para crear, acceder y administrar memoria fijada y bloqueada para sistemas operativos Windows, macOS y Linux en .NET Core. Proporciona fijación automática de memoria y bloqueo opcional para operaciones confidenciales, lo que le ayuda a evitar reubicaciones de recolección de basura y ofrece un rendimiento mejorado en escenarios de manipulación de memoria de bajo nivel.
Desde un símbolo del sistema:
dotnet agregar paquete PinnedMemory
Paquete de instalación PinnedMemory
También puede buscar el paquete a través de la interfaz de usuario de NuGet o del sitio web:
NuGet: Memoria fijada
Gestión de memoria multiplataforma para Windows, Linux y macOS.
Admite varios tipos primitivos (p. ej., byte
, int
, float
, etc.).
Ofrece puesta a cero, bloqueo y desbloqueo de memoria para mayor seguridad y rendimiento.
Evita que la recolección de basura reubique la memoria fijando la matriz en la memoria.
Clonación y agrupación eficiente de matrices utilizando ArrayPool<T>
.
Optimizado para el rendimiento con una alineación agresiva y asignaciones reducidas.
usando (var pin = new PinnedMemory<byte>(nuevo 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 = pin.Leer(2);}
usando (var pin = new PinnedMemory<byte>(new byte[] {65, 61, 77}, false)){var clone = pin.Clone();var clonedArray = clone.ToArray();}
usando (var pin = new PinnedMemory<byte>(new byte[3], cero: verdadero, bloqueado: verdadero)){// La memoria se pone a cero y se bloquea automáticamente.// Realiza operaciones seguras.}
PinnedMemory
admite los siguientes tipos primitivos:
sbyte
byte
char
short
ushort
int
uint
long
ulong
float
double
decimal
bool
PinnedMemory(valor T[], bool cero = verdadero, bool bloqueado = verdadero, tipo SystemType = SystemType.Unknown)
valor : la matriz que se fijará en la memoria.
cero : Opcional. Si es true
, la memoria se pondrá a cero después de la asignación.
bloqueado : Opcional. Si es true
, la memoria se bloqueará en la RAM para evitar la paginación.
tipo : Opcional. Especifica la plataforma del sistema operativo ( SystemType.Windows
, SystemType.Linux
, SystemType.Osx
). Si es Unknown
, se detecta automáticamente.
T this[int i] : Indexador para acceder a elementos en la matriz fijada.
int Longitud : Devuelve la longitud de la matriz fijada.
T[] Read() : Devuelve la matriz fijada completa.
T Read(int index) : Lee el valor en el índice especificado.
Escritura vacía (índice int, valor T) : escribe el valor en el índice especificado.
PinnedMemory Clone() : clona la matriz de memoria fijada y devuelve un nuevo objeto PinnedMemory<T>
.
T[] ToArray() : Devuelve una copia de la memoria anclada como una matriz.
void Dispose() : libera la memoria fijada, la pone a cero y la desbloquea si está bloqueada.
Esta biblioteca tiene la licencia MIT.