Строки в горячих участках вашего кода бьют по памяти сильнее чем кажется. В ASP.NET они часто оказываются в топе аллокаторов в профайлере.
Что создаёт лишние строки
• Интерполяция
var key = $"{userId}:{tenantId. Каждый вызов порождает новый string и новый массив char.• string.Format
string.Format("{0}-{1}", a, b); работает по той же схеме создаёт новый объект и буфер под символы.• Частые
ToString()request.Headers["X-Id"].ToString(); при каждом запросе снова строит строку из заголовка.Как сделать безопаснее
• Использовать структурированное логирование
logger.LogInformation("User {UserId} logged in", userId);В этом случае
ILogger не формирует строку когда соответствующий уровень логов отключён, а значения попадают в структурированные поля записи.• Не вызывать
ToString() без необходимостиФормируйте строку только там где она действительно нужна в ответе или в редком логировании, а не в общем горячем пути.
• В особо чувствительных местах использовать
Span и ValueStringBuilderОни позволяют собирать текст в переиспользуемом буфере и заметно снизить количество мусора.
Если код выполняется на каждом запросе, строковая интерполяция и лишние преобразования в string перестают быть дешёвым сахаром и становятся реальным источником аллокаций.
📍 Навигация: Вакансии • Задачи • Собесы
🐸Библиотека шарписта
#il_люминатор