PinnedMemory — это кроссплатформенное высокопроизводительное решение для создания, доступа и управления закрепленной и заблокированной памятью для операционных систем Windows, macOS и Linux в .NET Core. Он обеспечивает автоматическое закрепление памяти и дополнительную блокировку для конфиденциальных операций, помогая предотвратить перемещение сборки мусора и обеспечивая повышенную производительность в сценариях манипулирования памятью на низком уровне.
Из командной строки:
dotnet добавить пакет PinnedMemory
Установочный пакет PinnedMemory
Вы также можете выполнить поиск пакета через пользовательский интерфейс NuGet или на веб-сайте:
NuGet: PinnedMemory
Кроссплатформенное управление памятью для Windows, Linux и macOS.
Поддерживает несколько примитивных типов (например, byte
, int
, float
и т. д.).
Предлагает обнуление, блокировку и разблокировку памяти для обеспечения безопасности и производительности.
Предотвращает перемещение памяти сборкой мусора, закрепляя массив в памяти.
Эффективное клонирование и объединение массивов в пул с помощью ArrayPool<T>
.
Оптимизирован для производительности с агрессивным встраиванием и сокращением выделения памяти.
используя (var pin = новый PinnedMemory<byte>(новый байт[3])){pin[0] = 65;pin[1] = 61;pin[2] = 77;}
используя (var pin = new PinnedMemory<byte>(new byte[3])){pin.Write(0, 65);pin.Write(1, 61);pin.Write(2, 77);}
используя (var pin = new PinnedMemory<byte>(new byte[] {65, 61, 77}, false)){var byte1 = pin[0];var byte2 = pin[1];var byte3 = pin[2] ;}
используя (var pin = new PinnedMemory<byte>(new byte[] {65, 61, 77}, false)){var byte1 = pin.Read(0);var byte2 = pin.Read(1);var byte3 = pin.Read(2);}
используя (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], ноль: true, locked: true)){// Память автоматически обнуляется и блокируется.// Выполнение безопасных операций.}
В PinnedMemory
поддерживаются следующие примитивные типы:
sbyte
byte
char
short
ushort
int
uint
long
ulong
float
double
decimal
bool
PinnedMemory (значение T[], bool ноль = true, bool locked = true, тип SystemType = SystemType.Unknown)
value : Массив для закрепления в памяти.
ноль : Необязательно. Если true
, память будет обнулена после выделения.
заблокировано : Необязательно. Если true
, память будет заблокирована в ОЗУ для предотвращения подкачки.
тип : Необязательный. Указывает платформу ОС ( SystemType.Windows
, SystemType.Linux
, SystemType.Osx
). Если Unknown
, оно определяется автоматически.
T this[int i] : Индексатор для доступа к элементам закрепленного массива.
int Длина : возвращает длину закрепленного массива.
T[] Read() : возвращает весь закрепленный массив.
T Read(int index) : Считывает значение по указанному индексу.
void Write(int index, T value) : записывает значение по указанному индексу.
PinnedMemory Clone() : клонирует закрепленный массив памяти и возвращает новый объект PinnedMemory<T>
.
T[] ToArray() : возвращает копию закрепленной памяти в виде массива.
void Dispose() : освобождает закрепленную память, обнуляет ее и разблокирует, если она заблокирована.
Эта библиотека лицензируется по лицензии MIT.