PinnedMemory是一个跨平台的高性能解决方案,用于在 .NET Core 中创建、访问和管理 Windows、macOS 和 Linux 操作系统的固定和锁定内存。它为敏感操作提供自动内存固定和可选锁定,帮助您防止垃圾收集重定位,并在低级内存操作场景中提供增强的性能。
从命令提示符处:
dotnet 添加包 PinnedMemory
安装包 PinnedMemory
您还可以通过 NuGet UI 或网站搜索包:
NuGet:固定内存
适用于 Windows、Linux 和 macOS 的跨平台内存管理。
支持多种基本类型(例如, byte
、 int
、 float
等)。
提供内存归零、锁定和解锁,以确保安全性和性能。
通过将数组固定在内存中来防止垃圾回收重新定位内存。
使用ArrayPool<T>
高效克隆和池化数组。
通过积极的内联和减少的分配来优化性能。
使用 (var pin = new PinnedMemory<byte>(new 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] ;}
using (var pin = new PinnedMemory<byte>(new byte[] {65, 61, 77}, false)){var byte1 = pin.Read(0);var byte2 = pin.Read(1);var byte3 =引脚.读取(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,locked:true)){// 内存自动清零并锁定。 // 执行安全操作。}
PinnedMemory
支持以下原始类型:
sbyte
byte
char
short
ushort
int
uint
long
ulong
float
double
decimal
bool
PinnedMemory(T[] 值,布尔零 = true,布尔锁定 = true,SystemType 类型 = SystemType.Unknown)
value :要固定在内存中的数组。
零:可选。如果为true
,则分配后内存将被清零。
锁定:可选。如果为true
,内存将被锁定在 RAM 中以防止分页。
类型:可选。指定操作系统平台( SystemType.Windows
、 SystemType.Linux
、 SystemType.Osx
)。如果Unknown
,则会自动检测到。
T this[int i] :用于访问固定数组中元素的索引器。
int Length :返回固定数组的长度。
T[] Read() :返回整个固定数组。
T Read(int index) :读取指定索引处的值。
void Write(int index, T value) :写入指定索引处的值。
PinnedMemory Clone() :克隆固定内存数组并返回一个新的PinnedMemory<T>
对象。
T[] ToArray() :以数组形式返回固定内存的副本。
void Dispose() :释放固定内存,将其清零,如果锁定则将其解锁。
该库根据 MIT 许可证获得许可。