💾 Оптимизация использования памяти
🚀 Так как в вебсокетах я гоню сырые байты, пришлось заняться лишними аллокациями.
🧐 В итоге углубился в
Span, ArrayPool и stackalloc.📊 Результаты BenchmarkDotNet:
📉 Стандартно: ~200 KB/операция (до 40 ГБ суммарно) + GC (вплоть до Gen2).
✅ Оптимизировано: 0 аллокаций.
⚡️ Скорость: рост в 13–18 раз.
📌 Подходы, которые я попробовал:
1️⃣ Allocating Method (Standard)
🛠 Использование
Split() и т.д. создает избыточные массивы и строки. На больших объемах это кучи мусора, вызывающие тормоза, т.к. идет нагрузка на GC.2️⃣ Оптимизированный подход
🔹
ReadOnlySpan👁 Работаешь как с «окном» в исходный массив
buffer.🚫 Ничего не копируешь просто двигаешься по уже существующим данным.
🔹
ArrayPool🔄 Позволяет брать массивы из пула и потом возвращать обратно. Тут важно не забывать Return, иначе можно словить неприятные баги.
🔹
stackalloc позволяет выделять память прямо на стеке:- очищается после выхода из метода
- подходит только для небольших данных




