TGViewer
Библиотека шарписта | C#, F#, .NET, ASP.NET Библиотека шарписта | C#, F#, .NET, ASP.NET @csharpproglib · 21.6K subscribers
Post #6134 4.47K
⚙️ Как управлять памятью с помощью Span и Memory

Span<T> — это структура данных, которая предоставляет доступ к диапазону элементов в памяти. Это меньше чем массив, потому что Span<T> является сегментом памяти, а не целым массивом.

Memory<T> — очень похож на Span, но с возможностью работать с данными в куче. Он может быть использован в асинхронных операциях и может сохраняться как переменная.

Работа с памятью без копий данных

Span и Memory позволяют работать с данными, не создавая новых копий.
public static void ProcessData()
{
// Создаем массив данных
int[] data = new int[100];

// Создаем Span, который ссылается на часть массива
Span<int> span = new Span<int>(data);

// Модифицируем данные через Span
span[0] = 42;
span[1] = 84;

// Выводим измененные данные
Console.WriteLine(data[0]); // 42
Console.WriteLine(data[1]); // 84
}


Использование Memory в асинхронных операциях

Если вам нужно передать данные в асинхронную задачу, используйте Memory, так как Span не может быть использован вне методов.
public async Task ProcessMemoryAsync()
{
byte[] data = new byte[100];
Memory<byte> memory = new Memory<byte>(data);

// Передаем данные в асинхронный метод
await SomeAsyncOperation(memory);
}

public async Task SomeAsyncOperation(Memory<byte> memory)
{
// Работа с Memory
memory.Span[0] = 1;
await Task.Delay(100); // асинхронная операция
}


Использование Memory с большими объемами данных

Если у вас есть большие данные, которые не помещаются в стек, используйте Memorу. Это позволит эффективно работать с кучей, сохраняя данные в памяти и передавая их по мере необходимости.

Span и Memory — это настоящие маги производительности в C#. Они позволяют работать с памятью быстро, избавляя от необходимости копировать данные и снижая нагрузку на сборщик мусора

🐸Библиотека шарписта #буст
  • 👍 19
  • ❤ 3
More from @csharpproglib
  1. Sep 30, 2026📝 Логирование со строковой интерполяцией Логирование c интерполяцией строк один из самых…
  2. Sep 28, 2026👨‍💻 Не показывайте технические ошибки пользователям Когда приложение падает с необработа…
  3. Sep 26, 2026📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека шарписта #garbage_collector
  4. Sep 25, 2026🔐 NuGet: Microsoft меняет сертификат подписи С 23 сентября Microsoft использует новый сер…
  5. Sep 24, 2026🤩 Как поймать зависший .NET-сервис Приложение начинает тормозить, запросы зависают, а в л…
  6. Sep 23, 2026⚙️ yield return не бесплатный Итераторы выглядят просто, но работают иначе: IEnumerable<in…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →