PinnedMemory est une solution multiplateforme hautes performances permettant de créer, d'accéder et de gérer de la mémoire épinglée et verrouillée pour les systèmes d'exploitation Windows, macOS et Linux dans .NET Core. Il fournit un épinglage automatique de la mémoire et un verrouillage facultatif pour les opérations sensibles, vous aidant ainsi à empêcher les déplacements du garbage collection et offrant des performances améliorées dans les scénarios de manipulation de mémoire de bas niveau.
Depuis une invite de commande :
dotnet ajoute un package PinnedMemory
Package d'installation PinnedMemory
Vous pouvez également rechercher le package via votre interface utilisateur NuGet ou votre site Web :
NuGet : mémoire épinglée
Gestion de la mémoire multiplateforme pour Windows, Linux et macOS.
Prend en charge plusieurs types primitifs (par exemple, byte
, int
, float
, etc.).
Offre la remise à zéro, le verrouillage et le déverrouillage de la mémoire pour plus de sécurité et de performances.
Empêche le garbage collection de déplacer la mémoire en épinglant le tableau en mémoire.
Clonage et regroupement efficaces de tableaux à l'aide de ArrayPool<T>
.
Optimisé pour les performances avec une inlining agressive et des allocations réduites.
en utilisant (var pin = new PinnedMemory<byte>(new byte[3])){pin[0] = 65;pin[1] = 61;pin[2] = 77;}
en utilisant (var pin = new PinnedMemory<byte>(new byte[3])){pin.Write(0, 65);pin.Write(1, 61);pin.Write(2, 77);}
en utilisant (var pin = new PinnedMemory<byte>(new byte[] {65, 61, 77}, false)){var byte1 = pin[0];var byte2 = pin[1];var byte3 = pin[2] ;}
using (var pin = new PinnedMemory<byte>(new byte[] {65, 61, 77}, false)){var byte1 = pin.Read(0);var byte2 = pin.Read(1);var byte3 = broche.Read(2);}
using (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, verrouillé : true)){// La mémoire est automatiquement remise à zéro et verrouillée.// Effectuer des opérations sécurisées.}
Les types primitifs suivants sont pris en charge dans PinnedMemory
:
sbyte
byte
char
short
ushort
int
uint
long
ulong
float
double
decimal
bool
PinnedMemory (valeur T[], bool zéro = vrai, bool verrouillé = vrai, type SystemType = SystemType.Unknown)
value : Le tableau à épingler en mémoire.
zéro : Facultatif. Si true
, la mémoire sera mise à zéro après l'allocation.
verrouillé : facultatif. Si true
, la mémoire sera verrouillée dans la RAM pour empêcher la pagination.
tapez : Facultatif. Spécifie la plate-forme du système d'exploitation ( SystemType.Windows
, SystemType.Linux
, SystemType.Osx
). Si Unknown
, il est détecté automatiquement.
T this[int i] : Indexeur pour accéder aux éléments du tableau épinglé.
int Longueur : Renvoie la longueur du tableau épinglé.
T[] Read() : renvoie l'intégralité du tableau épinglé.
T Read(int index) : Lit la valeur à l'index spécifié.
void Write(int index, T value) : Écrit la valeur à l'index spécifié.
PinnedMemory Clone() : Clone le tableau de mémoire épinglé et renvoie un nouvel objet PinnedMemory<T>
.
T[] ToArray() : renvoie une copie de la mémoire épinglée sous forme de tableau.
void Dispose() : libère la mémoire épinglée, la met à zéro et la déverrouille si elle est verrouillée.
Cette bibliothèque est sous licence MIT.