PinnedMemoryは、.NET Core で Windows、macOS、Linux オペレーティング システム用の固定メモリとロック メモリを作成、アクセス、管理するためのクロスプラットフォームの高性能ソリューションです。機密性の高い操作に対して自動メモリ固定とオプションのロックを提供し、ガベージ コレクションの再配置を防止し、低レベルのメモリ操作シナリオでのパフォーマンスの向上を実現します。
コマンド プロンプトから:
dotnet パッケージ PinnedMemory を追加
インストールパッケージ PinnedMemory
NuGet UI または Web サイトからパッケージを検索することもできます。
NuGet: ピン留めされたメモリ
Windows、Linux、macOS のクロスプラットフォームのメモリ管理。
いくつかのプリミティブ型 (例: byte
、 int
、 float
など) をサポートします。
セキュリティとパフォーマンスのためにメモリのゼロ化、ロック、ロック解除を提供します。
配列をメモリ内に固定することで、ガベージ コレクションによるメモリの再配置を防ぎます。
ArrayPool<T>
を使用した配列の効率的なクローン作成とプール。
積極的なインライン化と割り当ての削減により、パフォーマンスが最適化されています。
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)){// メモリは自動的にゼロ化され、ロックされます。// 安全な操作を実行します。}
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 内でロックされます。
type : オプション。 OS プラットフォーム ( 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 ライセンスに基づいてライセンスされています。