PinnedMemory ist eine plattformübergreifende Hochleistungslösung zum Erstellen, Zugreifen und Verwalten von angeheftetem und gesperrtem Speicher für Windows-, macOS- und Linux-Betriebssysteme in .NET Core. Es bietet automatisches Anheften des Speichers und optionales Sperren für sensible Vorgänge, hilft Ihnen dabei, Verschiebungen der Garbage Collection zu verhindern und bietet eine verbesserte Leistung bei Speichermanipulationsszenarien auf niedriger Ebene.
Von einer Eingabeaufforderung:
dotnet fügt das Paket PinnedMemory hinzu
Install-Package PinnedMemory
Sie können das Paket auch über Ihre NuGet-Benutzeroberfläche oder Website suchen:
NuGet: PinnedMemory
Plattformübergreifende Speicherverwaltung für Windows, Linux und macOS.
Unterstützt mehrere primitive Typen (z. B. byte
, int
, float
usw.).
Bietet Nullsetzen, Sperren und Entsperren des Speichers für Sicherheit und Leistung.
Verhindert, dass die Speicherbereinigung Speicher verschiebt, indem das Array im Speicher fixiert wird.
Effizientes Klonen und Poolen von Arrays mit ArrayPool<T>
.
Optimiert für Leistung mit aggressivem Inlining und reduzierten Zuweisungen.
using (var pin = new PinnedMemory<byte>(new byte[3])){pin[0] = 65;pin[1] = 61;pin[2] = 77;}
using (var pin = new PinnedMemory<byte>(new byte[3])){pin.Write(0, 65);pin.Write(1, 61);pin.Write(2, 77);}
using (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 = pin.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, Locked: True)){// Speicher wird automatisch auf Null gesetzt und gesperrt.// Sichere Vorgänge durchführen.}
Die folgenden primitiven Typen werden in PinnedMemory
unterstützt:
sbyte
byte
char
short
ushort
int
uint
long
ulong
float
double
decimal
bool
PinnedMemory(T[]-Wert, Bool Null = wahr, Bool gesperrt = wahr, SystemType-Typ = SystemType.Unknown)
Wert : Das Array, das im Speicher fixiert werden soll.
Null : Optional. Bei true
wird der Speicher nach der Zuweisung auf Null gesetzt.
gesperrt : Optional. Bei true
wird der Speicher im RAM gesperrt, um Paging zu verhindern.
Typ : Optional. Gibt die Betriebssystemplattform an ( SystemType.Windows
, SystemType.Linux
, SystemType.Osx
). Wenn Unknown
, wird es automatisch erkannt.
T this[int i] : Indexer für den Zugriff auf Elemente im angehefteten Array.
int Länge : Gibt die Länge des angehefteten Arrays zurück.
T[] Read() : Gibt das gesamte angeheftete Array zurück.
T Read(int index) : Liest den Wert am angegebenen Index.
void Write(int index, T value) : Schreibt den Wert am angegebenen Index.
PinnedMemory Clone() : Klont das angeheftete Speicherarray und gibt ein neues PinnedMemory<T>
-Objekt zurück.
T[] ToArray() : Gibt eine Kopie des angehefteten Speichers als Array zurück.
void Dispose() : Gibt den angehefteten Speicher frei, setzt ihn auf Null und entsperrt ihn, wenn er gesperrt ist.
Diese Bibliothek ist unter der MIT-Lizenz lizenziert.