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 許可證獲得許可。