Код IT
← Каталог

Справочник по C# — 3. `Span<T>`, `ReadOnlySpan<T>`, `Memory<T>`, `ReadOnlyMemory<T>`

Фрагмент из «Справочник по C#»: 3. `Span<T>`, `ReadOnlySpan<T>`, `Memory<T>`, `ReadOnlyMemory<T>`.

C# main.cs
// Из массива
var arr = new byte[1024];
Span<byte> span = arr.AsSpan();
ReadOnlySpan<byte> roSpan = arr.AsSpan().Slice(10, 100);

// Из строки
ReadOnlySpan<char> strSpan = "Hello".AsSpan();

// Из неуправляемой памяти
unsafe
{
    void* ptr = NativeMemory.Alloc(1024);
    Span<byte> span = new(ptr, 1024);
    NativeMemory.Free(ptr); // ← осторожно: span живёт дольше памяти!
}

// Из stackalloc (без unsafe в C# 7.2+)
Span<byte> buffer = stackalloc byte[256];

// Из Memory<T>
Memory<byte> mem = new byte[1024];
Span<byte> span = mem.Span; // только в синхронном контексте!
// Из массива
var arr = new byte[1024];
Span<byte> span = arr.AsSpan();
ReadOnlySpan<byte> roSpan = arr.AsSpan().Slice(10, 100);

// Из строки
ReadOnlySpan<char> strSpan = "Hello".AsSpan();

// Из неуправляемой памяти
unsafe
{
    void* ptr = NativeMemory.Alloc(1024);
    Span<byte> span = new(ptr, 1024);
    NativeMemory.Free(ptr); // ← осторожно: span живёт дольше памяти!
}

// Из stackalloc (без unsafe в C# 7.2+)
Span<byte> buffer = stackalloc byte[256];

// Из Memory<T>
Memory<byte> mem = new byte[1024];
Span<byte> span = mem.Span; // только в синхронном контексте!